【问题标题】:C# Excel: Issue in copying worksheet from different workbookC# Excel:从不同工作簿复制工作表时出现问题
【发布时间】:2019-01-17 18:33:28
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 即使您的代码有效,但它似乎不是正确的答案,因为我在 Microsoft [链接] (docs.microsoft.com/en-us/visualstudio/vsto/…) 提供的同一工作簿中使用 Worksheet.copy 进行了测试,并且有用。因此,除非需要在工作簿中使用副本是一个奇怪的限制,否则代码应该仍然有效。
    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    相关资源
    最近更新 更多