重新连接到断开的Excel COM互操作实例

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

有没有办法使用Microsoft.Office.Interop.Excel命名空间连接到一个现有的 Excel实例,而不是它自己生成? 或者有没有其他办法可以让孤立的Excel实例可见,这样我就可以保存它完成了什么?


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


更多细节 :程序正在做的是从它自己的(专有的)数据库中导出一个报告,然而由于某些原因,数据库中的一些logging变得格式错误,导致在生成报告时发生Integer Overflow错误。 查看堆栈跟踪,看起来这个整数溢出在报告结束时产生总结。

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

如果我为不同的date范围运行报表,那么报表就会生成正确的报表,这只是关于一天中某条logging导致此特定input集合失败的原因。

与应用程序提供商的支持合同过期和pipe理没有兴趣更新它,因为我们正在切换到新的供应商(这就是为什么报告正在生成,用作数据源数据转换)。 所以我一直负责“修复”,这样数据就可以移走了。


最后更新 :我问这个问题的原因已经解决了。 我能够通过程序本身去查看每条logging,并且我发现有一个字段设置为16274176.00的logging(正常值在100年代(不要问我为什么看起来是一个浮点数导致Integer Overflow错误)),一旦我将其更改为0.00报告打印罚款。 不过,我仍然想知道是否有我的原始问题的答案,因为我认为这将是我的工具箱中的一个有用的工具。

关于你原来的问题,我认为它实际上可能是一个可能的重复在这里问: 在C#处理Excel应用程序的实例

给这个博客文章指出了几个答案:以编程方式启动Office应用程序 ,它为您提供了如何从托pipe代码连接到已经运行的Office应用程序的选项。

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