1

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

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


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


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

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

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

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


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

4

1 回答 1

1

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

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

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

于 2013-01-06T10:28:20.090 回答