エクセルシートのコピー

解決


studio-take  2012-09-05 19:35:58  No: 42849

たびたび、失礼します。

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


au  2012-09-05 19:51:25  No: 42850

whileループの中で
Query.Next;
が無い為、無限ループしてるんじゃないでしょうか?


studio-take  2012-09-05 21:02:53  No: 42851

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)
ぶどう

って感じで、倍々していったんですが、この方法は止めました。


studio-take  2012-09-05 21:14:38  No: 42852

自己解決しました。

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']で追加できているみたいでしたし。


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

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






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