在 Excel 加载项中从另一个工作簿插入 Sheet

Inserting Sheet from another Workbook in Excel Add-in

我正在尝试从现有的 Excel 工作簿中复制 sheet,然后使用 Excel 加载项将其粘贴到当前工作簿中。我正在使用以下代码,但它抛出异常:

private void insertSamplingWksht_Click(object sender, RibbonControlEventArgs e)
{
     Microsoft.Office.Interop.Excel.Application xlApp = new    
     Microsoft.Office.Interop.Excel.Application();
     Workbook templateWorkbook = xlApp.Workbooks.Open(templatePath);
     Worksheet from = (templateWorkbook.Sheets[1] as Worksheet); // Get first sheet
     Worksheet to = (Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet as Worksheet);
     from.Copy(to, Type.Missing); // Throws System.Runtime.InteropServices.COMException: 'No such interface supported'
 }

我也尝试了以下方法,但也没有用。

private void insertSamplingWksht_Click(object sender, RibbonControlEventArgs e)
{
    string templatePath = @"path to file";

    Microsoft.Office.Interop.Excel.Application xlApp = Globals.ThisAddIn.Application;
    var activeWkbName = xlApp.ActiveWorkbook.Name;

    int beforeCount = xlApp.Workbooks.Count; // 1

    var templateWorkbook = xlApp.Workbooks.Open(templatePath);
    var from = (templateWorkbook.Sheets[1] as Microsoft.Office.Interop.Excel.Worksheet);

    int afterCount = xlApp.Workbooks.Count; // also 1

    xlApp.Workbooks[activeWkbName].Activate(); // COMException: 'Invalid index. 
    from.Copy(xlApp.ActiveWorkbook.ActiveSheet, Type.Missing);
}

试试这个

            // no need to open another Excel instance
            Microsoft.Office.Interop.Excel.Application xlApp = Globals.ThisAddIn.Application;
            // get the name of the active workbook to be able to return back
            var activeWkbName = xlApp.ActiveWorkbook.Name;

            // open the template workbook - which will become active then
            var templateWorkbook = xlApp.Workbooks.Open(templatePath);
            var from = (templateWorkbook.Sheets[1] as Microsoft.Office.Interop.Excel.Worksheet); 

            // active the original one
            xlApp.Workbooks[activeWkbName].Activate();
            from.Copy(xlApp.ActiveWorkbook.ActiveSheet, Type.Missing);

这是一个奇怪的 Excel 问题。我们通过位于 HKEY_CURRENT_USER\Software\Microsoft\Office.0\Common\General\DisableBootToOfficeStart 的注册表项禁用了 Excel 欢迎页面。由于某些奇怪的原因,这使这段代码无法按预期工作。