お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"ExcelをV-Tableバインディングで動かす"

この発言に対し以下のコメントが寄せられています
#00835 TN さん RE:ExcelをV-Tableバインディングで動かす

 OLE/COMの技術資料には,Invoke経由は遅い,タコだと書いてありますが, そうとも限らないようですね.MSのアプリの場合だけかどうかわかりませんが.  以下にExcel97をNT4.0 SP3 Pen166MHzの上で動かした例を載せます. 初回はディスクキャッシュが効いていないので何秒か余計にかかりますから 注意. ・Excel_TLB.pasを作るには,プロジェクト/タイプライブラリの取り込みで   Microsoft Excel 8.0 Object Library を取り込むとできます. ------------------------------------------------------ program Project1; uses Excel_TLB in 'Excel_TLB.pas', Forms, // 順序を変えないとApplicationの宣言が重複していてだめ Unit1 in 'Unit1.pas' {Form1}, Office_TLB in 'Office_TLB.pas'; {$R *.TLB} {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. ------------------------------------------------------ interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComObj, Excel_TLB; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.DFM} // V-Tableバインディングの場合 : 約9秒で,保存しますか? が出る procedure TForm1.Button1Click(Sender: TObject); var Ex_Application : _Application; Ex_WorkBook : _WorkBook; Ex_WorkSheet: _WorkSheet; i: integer; begin Ex_Application := CoApplication.Create; Ex_Application.WorkBooks.add(Null, 0); Ex_WorkBook := Ex_Application.ActiveWorkBook; Ex_WorkSheet := Ex_Application.ActiveSheet as _WorkSheet; for i := 1 to 1000 do Ex_WorkSheet.Cells[i,1] := 'TestTest'; Ex_Application.WorkBooks.Close(0); end; // レイトバインディングの場合 : 約5秒で,保存しますか? が出る(@_@) procedure TForm1.Button2Click(Sender: TObject); var Excel:Variant; Ex_Application : Variant; Ex_WorkBook :Variant; Ex_WorkSheet: Variant; i: integer; begin Excel := CreateOleObject('Excel.Application'); Ex_Application := Excel.Application; Ex_Application.WorkBooks.add; Ex_WorkBook := Ex_Application.ActiveWorkBook; Ex_WorkSheet := Ex_Application.ActiveSheet; for i := 1 to 1000 do Ex_WorkSheet.Cells[i,1] := 'TestTest'; Ex_Application.WorkBooks.Close; Excel.Quit; end; end. TN(CQJ01721) Original document by TN 氏 ID:(CQJ01721)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum