お世話になります。
既存のExcelファイルに書き込みをしようとしているのですが、
シートのコピーは操作できるのでしょうか?
Sheet1とSheet2があり、
Sheet2を末尾に、[シート名:Sheet3]で
コピーさせたいのです。
(結果、シート3枚。)
ご存知の方がいらっしゃいましたら
ご指導の程よろしくお願いします。
まずは、Excelのマクロでシートをコピーする方法を知りましょう。
Excelのマクロで使われている関数は、DelphiのTExcelApplicationなどのコンポーネントにも存在するはずです。
場合によっては、マクロと同じようにはできないかもしれません。
# こないだ書いたCSVファイルの読み込みは、マクロと同じにはできませんでした
はじめまして。
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);
たしか、
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;
にしのさん、ウォレスさん、ありがとうございます。
どちらの方法も出来ました!
while文のところを仕様に基づいて変えていこうと思います。
大変ありがとうございました。
ツイート | ![]() |