我当前正在尝试从另一个工作簿复制工作表,但我使用Copy()和PasteSpecial()成功了。然而,我想知道为什么下面的代码不能工作,即使许多在线解决方案似乎使用这种方法。
Workbook currBook = Globals.ThisAddIn.GetActiveWorkbook();
Workbook copyBook = Globals.ThisAddIn.OpenWorkbook(Globals.ThisAddIn.Application.ActiveWorkbook.Path + @"\copyFile.xlsm", true, true);
//required worksheet
Worksheet copySheet = Globals.ThisAddIn.GetWorksheet(copyBook, "ToCopy");
copySheet.Copy(currBook.Worksheets[1]);
//close workbook
copyBook.Close();
获取具体表单的函数:
public Excel.Worksheet GetWorksheet(Excel.Workbook book, string sheetName, bool create = false)
{
foreach (Excel.Worksheet sheet in book.Worksheets)
{
//worksheet with name found
if (sheet.Name == sheetName)
{
sheet.Activate();
return sheet;
}
}
//worksheet can't be found
if (create)
{
Excel.Worksheet sheet = book.Worksheets.Add();
sheet.Name = sheetName;
sheet.Activate();
return sheet;
}
return null;
}
所述代码没有错误,并且工作表已被测试为存在。该程序根本不会在currBook中创建副本
发布于 2019-01-17 03:25:16
有趣的是,我只是在做别的事情...
为了指定目的地,必须使用Range.Copy,而不是Sheet.Copy
copySheet.UsedRange.Copy(currBook.Worksheets[1].Range["A1"]); 如果无法指定目标,则Excel将数据放入新的工作簿中。
https://stackoverflow.com/questions/54214748
复制相似问题