【发布时间】: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