C#Excel:从其他工作簿复制工作表时出现问题

时间:2019-01-16 10:11:51

标签: c# excel vsto office-addins excel-addins

我目前正在尝试从另一个工作簿中复制工作表,可以通过使用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中创建副本

1 个答案:

答案 0 :(得分:0)

有趣的是,我只是在做其他事情……

要指定目的地,必须使用Range.Copy,而不是Sheet.Copy

copySheet.UsedRange.Copy(currBook.Worksheets[1].Range["A1"]); 

如果无法指定目的地,则Excel会将数据放入新的工作簿中。