将 .xls sheet 复制到 .xlsm sheet

Copy .xls sheet into .xlsm sheet

我有几个 sheet 的 .xls 文件。我有几个 sheet 的 .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);

但是我得到一个错误 "copy method of worksheet class failed"。 SheetTo (xlsm) 是一个常规的 sheet,其中包含我想用 SheetFrom 的数据覆盖的数据。

我错过了什么?

我在网上看到了几种方法,但我不知道我失败是因为它是 .xlsm 还是因为我做错了什么。另外,我读到它必须与相同的 Excel 应用程序一起使用,但我正在从两个不同的文件中复制,所以我不确定该怎么做。

要复制 sheet 并将其作为最后一个插入 sheet 试试

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

然后您可以删除原始 SheetTo - 如果这适合您

编辑:更正了 delphi

的语法

当您复制 sheet 时,会在目标工作簿中创建一个新的 sheet。我认为您实际上想覆盖现有 sheet 的内容。在这种情况下执行以下操作:

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