我正在尝试打开一个保存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) {}
如果在当前,工作表和名称变量上调试并放置监视,您可以看到,只要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实例时才会失败.我真的不明白为什么会这样.
有谁知道如何解决这一问题?我在这里做错了吗?