プログラム初心者です。現在DelPhiからSQLのテーブルのレコードを読み込み、Excelに表示させるプログラムを作っています。
DelphiのServersタブのコンポーネントは使わず、OLEオートメーションを使ってExcelを操作しており、自分なりに調べてレコードはVariant配列を使って表示させることができましたが、罫線をレコード分描こうとする時の配列の書き方が分かりません。(レコードが表示されているセルに下罫線を描いていく。)
var
RCnt,FCnt: integer;
OleArray: OleVariant;
StartRow: Integer;
StartRowStr,EndRowStr: String;
OleArray: OleVariant;
*
*
begin
(以下SQLのデータを取り出すコード)
*
*
With Qry do begin
Open;
RCnt :=RecordCount;
FCnt :=FieldCount;
StartRow :=6;
StartRowStr :='A'+IntToStr(StartRow);
EndRowStr :='G'+IntToStr(StartRow+RCnt-1);
for j:=0 to 2 do begin
OleArray:=VarArrayCreate([0,RCnt-1,0,FCnt-1],VarVariant);
for i:=0 to RCnt-1 do begin
OleArray[i,0]:=FieldValues['@@@'];
*
*
Next;
end;
end;
WorkBook.Range[StartRowStr,EndRowStr].Value:=OleArray;
のような感じでレコードを表示させていますが、
WorkSheet.Range['','']Borders[xlEdgeBottom].LineStyle :=xlContinuous;
WorkSheet.Range['','']Borders[xlEdgeBottom].Weight := xlHairLine;
のような罫線を配列にするにはどういうコードを書いたらいいのでしょうか?今は配列にせずループ処理で一行ずつ罫線を描いていますがExcelへの表示が遅くて困っています。よろしくお願いします。
Mr.XRAYと申します.
>Variant配列でExcelの罫線を描くには?
Variant配列を使用する方法はわかりませんが,
ある範囲の罫線処理をまとめて,ということでしたら,以下が参考にならないでしょうか?
http://mrxray.on.coocan.jp/Delphi/plSamples/400_Excel_CreateObject.htm#List01
の Button12Click のコード
Delphiのバージョンも,OSのバージョンも,エクセルのバージョンも書いていない
ようですが,上のコードの動作確認は,ページの一番上の方に書いてあります.
それ以外での動作はわかりません.
また,この方法で処理が速くなるかもわかりません.
VBAのコードでエクセルの処理は,少し時間がかかる気がします.
これは,エクセルのマクロに書いても同じですから,Delphiということでは
ないようです.
質問が「Variant配列」ということですので,意図することと違っていたら
ゴメンなさい.
EXCEL VBAで重く且つ画面更新が頻繁に起きる処理をさせる場合は
以下のように画面更新を抑制すると格段に早くなります。
Application.ScreenUpdating = False
・・・重い処理
Application.ScreenUpdating = True
外していたらゴメンなさい
>Application.ScreenUpdating = False
おっ,そうでした.
これは必要かと思います.これがないと,処理中に結構チラツキもあります.
>Mr.XRAYさん、ウォレスさん
書き込み、ありがとうございます。
環境はWindowsXP(SP3) + Delphi7 Pro + SQLServer2000 + Excel2000です。すいませんでした。
Mr.XRAYさんが教えてくれたリンク先、参考にしました。それでもやっぱり罫線の処理は時間がかかりました。Mr.XRAYさんがおっしゃられた通り、VBAのコードでは時間がかかるという事でしょうか。Variant配列でレコードを表示させる処理がかなり速かったので、罫線もうまいやり方で配列で描けるものかと思っていました(汗)。
ウォレスさん、Mr.XRAYさんが教えてくれたScreenUpdatingプロパティを試してみた所、大分処理が早くなりました。Excelの処理にはきっと必須(?)のコードなんでしょうね。とても勉強になりました。
皆さん、ご教示本当にありがとうございました。
すいません。解決のチェックを入れ忘れていました。
エクセル操作の処理を速くしたいのであれば,
他のコンポーネント類を利用する手もあります.
http://homepage3.nifty.com/m-and-i/tips/tipspage.htm#component
にある XBIFF
http://www.adv.co.jp/products.htm
の ExcelCreator 2007
>Mr.XRAYさん
返信遅れて本当にすいません。紹介されたコンポーネント、活用させて頂きました。以前に比べて今はぜんぜん速度違います!前はレコードの全件表示約○十秒掛かっていたので(汗)。
色々と教えて頂き本当にありがとうございました。
>紹介されたコンポーネント、活用させて頂きました。
XBIFFの方でしょうか.
もしそうでしたら,以下の記事も参考にしてください.
先頭が0等の時に,文字列として格納するための修正コードの参考です.
http://mrxray.on.coocan.jp/bbs/DelphiBBS/mrxray_delphifan_coffe.cgi?tree=s1676
ツイート | ![]() |