VB.net Excel自动化随机ComException

我已经在这个问题上做了很多研究,但是还没有提出任何明确的答案。 在写出报告时,我遇到了Excel随机获取ComExceptions的问题。 我正在使用Visual Basic 2005(框架2.0)控制台应用程序来创build这些报告。 这个问题很难弄清楚,因为它在随机发生的地方出现,所以我不能抓住错误来看问题。 我已经浏览了不同的项目,并且没有什么奇怪的,会导致这些问题。

此外,有时报告运行良好,没有任何问题。

堆栈跟踪:(15:27:24:247)types:System.Runtime.InteropServices.COMException(15:27:24:247)消息:从HRESULTexception:0x800AC472(15:27:24:253)堆栈跟踪:在System.RuntimeType.ForwardCallToInvokeMember(String memberName,BindingFlags flags,Object target,Int32 [] aWrapperTypes,MessageData&msgData)at Microsoft.Office.Interop.Excel.Range.set_Value(Object RangeValueDataType,Object)Error Code:-2146777998

我的猜测(没有看到你的代码)是,你可能会遇到COM对象通过.NET互操作时被释放的方式。 看到这篇文章快速介绍。

从本质上讲,可能发生的事情是,你的代码创build的所有COM对象实际上都包装在一个.NET对象中。 这些.NET对象最终会在不可预知的时间被垃圾收集器处置。 当它们被丢弃时,底层COM对象被释放。 在某些情况下,当垃圾收集发生时,这可能会导致基础COM对象已被Excel销毁。

从.NET驱动Office比从VB6这样的老式技术推动它要困难许多倍,正是因为这个问题。 (另一个可能会遇到的问题是Excel进程没有终止 – 你会在SO上看到很多问题)。

PS。 要开始,在SO上searchReleaseComObject …