我已经对这个问题进行过相当多的研究,但还没有提出任何明确的决定。我在撰写报告时遇到Excel随机获取ComExceptions的问题。我正在使用Visual Basic 2005(框架2.0)控制台应用程序来创建这些报告。这个问题很难弄清楚,因为它在写出报告的时候发生在随机的地方,所以我无法发现错误来看问题。我已经查看了它所打破的不同项目,并且没有什么奇怪的,它们会导致任何这些问题。
此外,有时报告运行正常,没有任何问题。
堆栈跟踪: (15:27:24:247)类型:System.Runtime.InteropServices.COMException (15:27:24:247)消息:来自HRESULT的异常:0x800AC472 (15:27:24:253)堆栈跟踪:在System.RuntimeType.ForwardCallToInvokeMemb er(String memberName,BindingFlags flags,Object target,Int32 [] aWrapperTypes, MessageData&安培; MSGDATA) 在Microsoft.Office.Interop.Excel.Range.set_Value(Object RangeValueDataType, 对象) 错误代码:-2146777998
答案 0 :(得分:0)
我的猜测(没有看到你的代码)是你可能会在通过.NET互操作使用时释放COM对象的方式。有关快速介绍,请参阅this article。
基本上,可能发生的是您的代码创建的所有COM对象实际上都包含在.NET对象中。这些.NET对象最终会在不可预测的时间被垃圾收集器丢弃。当它们被释放时,底层COM对象被释放。在某些情况下,这可能会导致崩溃,在垃圾收集发生时,Excel已经破坏了底层COM对象。
从.NET驱动Office比使用像VB6这样的旧技术驱动它要困难多了很多倍。 (你可能遇到的另一个问题是Excel流程没有终止 - 你会在SO上看到很多关于这个问题的问题。)
PS。首先,在SO ...上搜索ReleaseComObject