C# 在Excel加载项中插入其他工作簿中的工作表
我正在尝试从现有Excel工作簿复制工作表,并使用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
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上尝试了更新后的代码,效果非常好。我正在调查一些可能导致问题的注册表项