Variant配列でExcelの罫線を描くには?

解決


Ta  2009-03-19 09:03:48  No: 33702

プログラム初心者です。現在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  2009-03-19 23:05:37  No: 33703

Mr.XRAYと申します.

>Variant配列でExcelの罫線を描くには?

Variant配列を使用する方法はわかりませんが,
ある範囲の罫線処理をまとめて,ということでしたら,以下が参考にならないでしょうか?

http://mrxray.on.coocan.jp/Delphi/plSamples/400_Excel_CreateObject.htm#List01
の Button12Click のコード

Delphiのバージョンも,OSのバージョンも,エクセルのバージョンも書いていない
ようですが,上のコードの動作確認は,ページの一番上の方に書いてあります.
それ以外での動作はわかりません.

また,この方法で処理が速くなるかもわかりません.
VBAのコードでエクセルの処理は,少し時間がかかる気がします.
これは,エクセルのマクロに書いても同じですから,Delphiということでは
ないようです.

質問が「Variant配列」ということですので,意図することと違っていたら
ゴメンなさい.


ウォレス  2009-03-19 23:22:57  No: 33704

EXCEL VBAで重く且つ画面更新が頻繁に起きる処理をさせる場合は
以下のように画面更新を抑制すると格段に早くなります。

Application.ScreenUpdating = False

・・・重い処理

Application.ScreenUpdating = True

外していたらゴメンなさい


Mr.XRAY  2009-03-20 00:14:05  No: 33705

>Application.ScreenUpdating = False

おっ,そうでした.
これは必要かと思います.これがないと,処理中に結構チラツキもあります.


Ta  2009-03-20 17:17:01  No: 33706

>Mr.XRAYさん、ウォレスさん

書き込み、ありがとうございます。

環境はWindowsXP(SP3) + Delphi7 Pro + SQLServer2000 + Excel2000です。すいませんでした。

Mr.XRAYさんが教えてくれたリンク先、参考にしました。それでもやっぱり罫線の処理は時間がかかりました。Mr.XRAYさんがおっしゃられた通り、VBAのコードでは時間がかかるという事でしょうか。Variant配列でレコードを表示させる処理がかなり速かったので、罫線もうまいやり方で配列で描けるものかと思っていました(汗)。

ウォレスさん、Mr.XRAYさんが教えてくれたScreenUpdatingプロパティを試してみた所、大分処理が早くなりました。Excelの処理にはきっと必須(?)のコードなんでしょうね。とても勉強になりました。

皆さん、ご教示本当にありがとうございました。


Ta  2009-03-20 17:18:10  No: 33707

すいません。解決のチェックを入れ忘れていました。


Mr.XRAY  2009-03-20 21:28:30  No: 33708

エクセル操作の処理を速くしたいのであれば,
他のコンポーネント類を利用する手もあります.

http://homepage3.nifty.com/m-and-i/tips/tipspage.htm#component
にある XBIFF

http://www.adv.co.jp/products.htm
の  ExcelCreator 2007


Ta  2009-03-23 19:33:55  No: 33709

>Mr.XRAYさん

返信遅れて本当にすいません。紹介されたコンポーネント、活用させて頂きました。以前に比べて今はぜんぜん速度違います!前はレコードの全件表示約○十秒掛かっていたので(汗)。

色々と教えて頂き本当にありがとうございました。


Mr.XRAY  2009-03-24 01:01:04  No: 33710

>紹介されたコンポーネント、活用させて頂きました。

XBIFFの方でしょうか.
もしそうでしたら,以下の記事も参考にしてください.
先頭が0等の時に,文字列として格納するための修正コードの参考です.

http://mrxray.on.coocan.jp/bbs/DelphiBBS/mrxray_delphifan_coffe.cgi?tree=s1676


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加