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

解決


さばたん  2003-08-01 04:46:27  No: 4287  IP: [192.*.*.*]

お世話になります。

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

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

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

編集    削除
にしの  2003-08-01 06:25:00  No: 4288  IP: [192.*.*.*]

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

編集    削除
ウォレス  2003-08-01 18:31:26  No: 4289  IP: [192.*.*.*]

はじめまして。
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  IP: [192.*.*.*]

たしか、
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  IP: [192.*.*.*]

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

編集    削除