我正在尝试打开保存的 Excel 工作簿,同时保留对当前工作簿的引用。问题是,只要我打开保存的工作簿,原始工作簿就会在访问时引发异常。
这是一个代码片段来演示。我把它放在一个功能区按钮的事件处理程序中来测试它。
try
{
string workbookPath = @"C:\Temp\Test.xlsx";
Workbook current = Globals.ThisAddIn.Application.ActiveWorkbook;
Workbook newWorkbook = Globals.ThisAddIn.Application.Workbooks.Open(workbookPath);
current.Activate(); // throws an exception
Sheets sheets = current.Worksheets; // throws an exception
string name = current.Name; // throws an exception
}
catch (Exception ex) {}
current
如果您调试并在,sheets
和变量上放置手表,name
您可以看到,一旦newWorkbook
实例化,其他变量在访问时就会抛出异常。
抛出的异常是
System.Runtime.InteropServices.COMException was caught
Message=Exception from HRESULT: 0x800401A8
Source=WorkbookTest
ErrorCode=-2147221080
StackTrace:
at Microsoft.Office.Interop.Excel._Workbook.Activate()
at WorkbookTest.Ribbon1.button1_Click(Object sender, RibbonControlEventArgs e) in C:\Temp\WorkbookTest\WorkbookTest\Ribbon1.cs:line 25
InnerException:
最奇怪的是,这只发生在新的 Excel 实例上。如果我打开 Excel,关闭第一个工作簿并打开一个新工作簿,它工作得很好。只有当我有一个新打开的 Excel 实例时才会失败。我真的不明白为什么会这样。
有谁知道如何解决这一问题?我在这里做错了吗?