たびたび、失礼します。
TExcelApplication で雛形エクセルファイルを開き、あらかじめ用意した「基本」シートをいくつもコピーしたいのですが、コピーしすぎてしまい、困っています。
多分、ループの二乗しています。
ご指導お願いします。
var
ExcelApp:TExcelApplication;
ExcelBook:TExcelWorkBook;
ExcelSheet1,ExcelSheet2:TExcelWorkSheet;
ExcelSheet1.ConnectTo(ExcelApp.Worksheets['基本'] as _WorkSheet);
ExcelSheet1.Activate;
While not Query.EOF do
begin
(ExcelBook.Sheets.Item['基本'] As ExcelWorkSheet).Select(EmptyParam,LCID);
(ExcelBook.Sheets.Item['基本'] As ExcelWorkSheet).Copy(EmptyParam,ExcelBook.Sheets.Item['基本'],LCID);
end;
最初、Copyの引数を新しいシート名で入力するようにしていたのですが、
「インデックスが無効です」となります。
一応、こちらを参考にしました。
https://www.petitmonte.com/bbs/answers?question_id=854
http://www12.plala.or.jp/selen/Delphi/Del_Excel.html
whileループの中で
Query.Next;
が無い為、無限ループしてるんじゃないでしょうか?
Nextは、あります。記述忘れです。
(ExcelBook.Sheets.Item['基本'] As ExcelWorkSheet).Copy(EmptyParam,ExcelBook.Sheets.Item['基本'],LCID);
この文だと「基本(1)」「基本(2)」「基本(3)」と増えて行くんですが、
新しい名称を予め設定するとエラーになるのが、現時点の問題です。
以前は、
ExcelSheet1.ConnectTo(ExcelApp.Worksheets['基本'] as _WorkSheet);
ExcelSheet1.Activate(LCID);
ExcelSheet1.Copy(EmptyParam,ExcelApp.Worksheets['基本'] as _WorkSheet,LCID);
ExcelSheet1.Name := FieldByName('NAME').Asstring;
として、
りんご
オレンジ
ぶどう
って入れると
基本
基本(1)
基本(2)
基本(3)
りんご
りんご(1)
りんご(2)
オレンジ
オレンジ(1)
ぶどう
って感じで、倍々していったんですが、この方法は止めました。
自己解決しました。
While not Query.EOF do
begin
(ExcelBook.Sheets.Item['基本'] As ExcelWorkSheet).Select(EmptyParam,0);
(ExcelBook.Sheets.Item['基本'] As ExcelWorkSheet).Copy(EmptyParam,ExcelBook.Sheets.Item['基本'],LCID);
with ExcelSheet2 do
begin
ConnectTo(ExcelBook.Sheets[2] As _WorkSheet);
Select;
Name := FieldByName('NAME').AsString;
//メインコーディング
//
Disconnect;
end;
Next;
end;
ただ、やっぱり、Copyのときに新しいシート名でコピーできないのが腑に落ちないです。
なぜでしょうか?
参考にしたBBSでは、['Sheet2']で追加できているみたいでしたし。
ツイート | ![]() |