Excelのシートをコピーするには?

解決


さばたん  2003-08-01 04:46:27  No: 4287

お世話になります。

既存のExcelファイルに書き込みをしようとしているのですが、
シートのコピーは操作できるのでしょうか?

Sheet1とSheet2があり、
Sheet2を末尾に、[シート名:Sheet3]で
コピーさせたいのです。
(結果、シート3枚。)

ご存知の方がいらっしゃいましたら
ご指導の程よろしくお願いします。


にしの  2003-08-01 06:25:00  No: 4288

まずは、Excelのマクロでシートをコピーする方法を知りましょう。
Excelのマクロで使われている関数は、DelphiのTExcelApplicationなどのコンポーネントにも存在するはずです。
場合によっては、マクロと同じようにはできないかもしれません。
# こないだ書いたCSVファイルの読み込みは、マクロと同じにはできませんでした


ウォレス  2003-08-01 18:31:26  No: 4289

はじめまして。
Officeを操作するのは興味がありますので、機会がある度、実験(?)しています。
試行錯誤の結果、以下でいけるようです。参考までに。
Copyメソッドの第1パラメータを空にして第2パラメータに持っていきたい先の(ここでは最後のシート)シートを指定すれば後ろに追加されるようです。

var
    Excel: Variant;
    WorkBook: Variant;
    WorkSheet: Variant;
    Aftertmp: Variant;
begin

{ここから
    Excel := CreateOleObject('Excel.Application');
    WorkBook := Excel.Workbooks.Add;
    while Workbook.sheets.count < 3 do
    begin
        Workbook.sheets.add;
    end;

    Excel.Visible := True;
    WorkSheet := WorkBook.WorkSheets[1];

ここまでは目的に合わせて}

    Aftertmp := WorkBook.WorkSheets[Workbook.sheets.count];
    WorkBook.WorkSheets[1].Copy( ,Aftertmp);


にしの  2003-08-01 18:43:23  No: 4290

たしか、
WorkBook.WorkSheets[1].Copy(After:=Aftertmp);
でもいけたと思いますよ。
# 未確認です

ちなみに、TExcelApplicationを使用した場合、

begin
  try
    ExcelApplication1.Connect;
    ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);

    //マクロとほぼ同じ
    //Sheet("Sheet1").Select ' マクロ
    (ExcelWorkbook1.Sheets.Item['Sheet1'] As ExcelWorksheet).Select(EmptyParam, 0);
    //Sheet("Sheet1").Copy After:=Sheet("Sheet2")
    (ExcelWorkbook1.Sheets.Item['Sheet1'] As ExcelWorksheet).Copy(
      EmptyParam,
      ExcelWorkbook1.Sheets.Item['Sheet2'],
      0);
  finally
    ExcelWorkbook1.Disconnect;
    ExcelApplication1.Disconnect;
  end;
end;


さばたん  2003-08-01 22:21:44  No: 4291

にしのさん、ウォレスさん、ありがとうございます。
どちらの方法も出来ました!
while文のところを仕様に基づいて変えていこうと思います。
大変ありがとうございました。


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

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






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