Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Excel加载项中插入其他工作簿中的工作表_C#_Excel_Vsto - Fatal编程技术网

C# 在Excel加载项中插入其他工作簿中的工作表

C# 在Excel加载项中插入其他工作簿中的工作表,c#,excel,vsto,C#,Excel,Vsto,我正在尝试从现有Excel工作簿复制工作表,并使用Excel加载项将其粘贴到当前工作簿中。我正在使用以下代码,但它引发了一个异常: private void insertSamplingWksht_Click(object sender, RibbonControlEventArgs e) { Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Ap

我正在尝试从现有Excel工作簿复制工作表,并使用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);
试试这个

            // 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);

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

这是一个奇怪的Excel问题。我们已通过HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Common\General\DisableBootToOfficeStart上的注册表项禁用了Excel欢迎页。出于某种奇怪的原因,这使此代码无法按预期工作。

xlApp.Workbooks[activeWkbName].Activate()行抛出COMException:“无效索引”。奇怪的是,请尝试使用xlApp.Workbooks.Item[activeWkbName].Activate()更改有问题的行;此处工作正常看起来Workbooks.Open()方法正在关闭当前打开的工作簿。Workbooks.Count在调用Open()之前和之后都是1。您可以共享完整的代码吗?至少是方法,是不是要添加<代码>打开当然不会关闭现有工作簿xlApp.Workbooks[activeWkbName].Activate()行抛出COMException:“无效索引”。奇怪的是,请尝试使用xlApp.Workbooks.Item[activeWkbName].Activate()更改有问题的行;此处工作正常看起来Workbooks.Open()方法正在关闭当前打开的工作簿。Workbooks.Count在调用Open()之前和之后都是1。您可以共享完整的代码吗?至少是方法,是不是要添加<代码>打开当然不会关闭现有工作簿我只是复制粘贴了您提供的代码(第二个版本)在一个新按钮下,它按预期工作。
afterCount
正确地说是
2
我建议创建一个新项目,从这里添加一个功能区并复制粘贴代码。它必须起作用。确保
工作簿.Open
确实打开了文件(必须可见),之后我在新安装的Excel上尝试了更新后的代码,效果非常好。我正在研究一些可能导致问题的注册表项。我刚刚复制了您提供的代码(第二个版本),并将其粘贴到一个新按钮下,它按预期工作。
afterCount
正确地说是
2
我建议创建一个新项目,从这里添加一个功能区并复制粘贴代码。它必须起作用。确保
工作簿.Open
确实打开了文件(必须可见),之后我在新安装的Excel上尝试了更新后的代码,效果非常好。我正在调查一些可能导致问题的注册表项