【问题标题】:Reconnect to a disconnected Excel COM Interop instance重新连接到断开连接的 Excel COM 互操作实例
【发布时间】:2013-01-06 01:21:11
【问题描述】:

我有一个使用 Excel COM Interop 将数据导出到 Excel 的第 3 方应用程序。他们的程序中有一个错误导致它在使 Excel 实例可见之前失败。但是,根据显示的堆栈跟踪,从哪里发生异常,我需要的信息已经写到 Excel 工作表中。

有没有办法使用Microsoft.Office.Interop.Excel 命名空间连接到一个现有 excel 实例,而不是生成它自己的?或者有没有其他方法可以使孤立的 Excel 实例可见,以便保存它完成的内容?


请注意,在程序关闭后,EXCEL.exe 在任务管理器中仍然可见,因此在应用程序断开连接后,该实例仍处于活动状态并运行。


更多详细信息:程序所做的是从它自己的(专有)数据库中导出报告,但是由于某种原因,数据库中的某些记录格式错误并导致出现Integer Overflow 错误在生成报告时。查看堆栈跟踪,在报告末尾生成摘要时,似乎发生了整数溢出。

对于我的用途,我不需要摘要,只需要报告中的行项目,所以我希望看到它到目前为止所做的工作,但它正在与之通信的 EXCEL.exe 实例不可见。

如果我针对报告生成的不同日期范围运行报告,则报告只是一天中的一条记录导致这组特定输入导致它失败。

与应用程序提供商的支持合同已过期,管理层对续订合同不感兴趣,因为我们正在切换到新供应商(这就是生成报告的原因,以用作数据-数据转换的来源)。所以我的任务是“修复它”,以便可以移动数据。


最终更新:我问这个问题的原因已经解决了。我能够通过程序本身浏览每条记录,我发现其中一个字段设置为 16274176.00 的记录(正常值在 100 中(不要问我为什么看起来是浮点数会导致 @ 987654324@ 错误)),一旦我将其更改为 0.00,报告打印得很好。但是,我仍然想知道我的原始问题是否有答案,因为我认为这将是我工具箱中的一个有用工具。

【问题讨论】:

  • 您是否有权访问第 3 方源代码或任何创建 COM 互操作实例的源代码..?
  • 不,我没有(而且从我在反汇编程序中发现的内容看来,它似乎是用 delphi 编写的,所以也没有像 ILSpy 这样的工具),我会编写自己的工具来获取3rd 方应用程序崩溃后的碎片。
  • 该程序是否曾经运行过而没有失败?
  • 看来你得花点时间了。要么导出大量具有小日期范围的报告并将它们组合成一个大报告,要么通过系统地使用日期范围来搜索损坏的数据(如果您确定存在)......
  • @erich007 我知道日期,我只是想从那个日期起得到我所能得到的一切。 (您的第一个建议也是我目前的解决方案,一个导出日期之前的所有内容,一个导出之后的所有内容并连接两者的行项目。但我仍然希望从那个单一日期的导出中获得我能得到的东西)

标签: c# excel office-interop


【解决方案1】:

关于您最初的问题,我认为它实际上可能与此处提出的问题重复:Get instance of Excel application with C# by Handle

给出的几个答案指向这篇博文:Launching Office Apps Programmatically,它为您提供了如何从托管代码连接到已经运行的 Office 应用程序的选项板。

博客文章以及给出的答案还包含示例代码来说明如何做到这一点。

【讨论】:

    猜你喜欢
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多