加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 打开已保存的工作簿会导致当前工作簿抛出异常

发布时间:2020-12-15 08:19:09 所属栏目:百科 来源:网络整理
导读:我正在尝试打开一个保存Excel工作簿,同时保持对当前工作簿的引用.问题是,只要我打开保存的工作簿,原始文件就会在访问时抛出异常. 这是一个要演示的代码片段.我把它放在一个事件处理程序中,用于测试它的功能区按钮. try{ string workbookPath = @"C:TempTes
我正在尝试打开一个保存Excel工作簿,同时保持对当前工作簿的引用.问题是,只要我打开保存的工作簿,原始文件就会在访问时抛出异常.

这是一个要演示的代码片段.我把它放在一个事件处理程序中,用于测试它的功能区按钮.

try
{
    string workbookPath = @"C:TempTest.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:TempWorkbookTestWorkbookTestRibbon1.cs:line 25
  InnerException:

最奇怪的是,这只发生在一个新的Excel实例上.如果我打开Excel,关闭第一个工作簿并打开一个新工作簿,它就可以正常工作.只有当我有一个新打开的Excel实例时才会失败.我真的不明白为什么会这样.

有谁知道如何解决这一问题?我在这里做错了吗?

解决方法

我认为这可能是正确的行为.

如果您要手动启动一个新的Excel会话(自动创建一个新的工作簿[Book1]),然后在没有对Book1打开现有工作簿的任何操作的情况下,您会注意到Excel会话中不再存在Book1.

我猜你通过C#插件遇到了同样的行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读