我正在尝试打开保存的 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
and 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:
最奇怪的是,这个only发生在 Excel 的新实例上。如果我打开 Excel,关闭第一个工作簿并打开一个新工作簿,它就可以正常工作。仅当我有一个新打开的 Excel 实例时,此操作才会失败。我实在不明白这是为什么。
有谁知道如何解决这一问题?我在这里做错了什么吗?
我认为这可能是正确的行为。
如果您要手动启动一个新的 Excel 会话(这会自动创建一个新工作簿 [Book1]),然后在不对 Book1 执行任何操作来打开现有工作簿的情况下,您会注意到 Excel 会话中不再存在 Book1。
我猜您正在通过 C# 加载项遇到相同的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)