将.xls工作表复制到.xlsm工作表中

时间:2015-09-04 21:27:37

标签: delphi export-to-excel xls import-from-excel xlsm

我有几张表的.xls文件。我有几张表的.xlsm文件。我想将xls.sheet(x)复制到xlsm.sheet(y)中。我尝试了以下代码:

try
    XLTo := CreateOleObject('Excel.Application');
    XLFrom := CreateOleObject('Excel.Application');
except
    ShowMessage('Excel might not be installed');
    exit;
end;

XLFrom.Workbooks.Open(filename1,1);
XLTo.Workbooks.Open(filename2,1);
SheetFrom := XLFrom.WorkSheets['Sheet Caption'];
SheetTo := XLScreener.WorkSheets['Sheet Caption'];
SheetFrom.Select;
SheetTo.Select;

直到这里,一切看起来还不错,现在我需要将SheetFrom复制到SheetTo中,但我对如何做到这一点很困惑。我试过了:

SheetScreener.Copy(SheetDF);

但我收到错误"工作表类的复制方法失败"。 SheetTo(xlsm)是一个常规工作表,其中包含我想要使用SheetFrom数据覆盖的数据。

我错过了什么?

我读了互联网并看到了几种方法,但我不知道我是否因为它的.xlsm而失败,或者因为我做错了什么。此外,我读到它必须使用相同的Excel应用程序,但我从两个不同的文件复制,所以我不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

复制工作表时,会在目标工作簿中创建新工作表。我想你实际上想要覆盖现有表格的内容。在这种情况下,请执行以下操作:

  • 在源工作簿中将源指定为Range对象。
  • 在目标工作簿中将目标指定为Range对象。只需指定左上角的单元格就足够了。
  • 使用Source.Copy(Dest)执行复制。

答案 1 :(得分:0)

要复制工作表并将其作为最后一页插入,请尝试

SheetFrom.Copy(XLTo.Sheets(XLTo.Sheets.Count))

然后你可以删除原始的SheetTo - 如果这对你有用

编辑:更正了delphi的语法