2011-06-16 20 views
1

我已經在這個問題上做了相當多的研究,並且還沒有提出任何確定性的問題。在寫出報告時,我遇到了Excel隨機獲取ComExceptions的問題。我正在使用Visual Basic 2005(框架2.0)控制檯應用程序來創建這些報告。這個問題很難弄清楚,因爲它在隨機發生的地方發生,所以我無法捕捉到錯誤以查看問題。我已經瀏覽了不同的項目,並且沒有什麼奇怪的會導致這些問題。使用VB.net進行隨機ComException Excel自動化

此外,有時報告運行正常,沒有任何問題。

堆棧跟蹤: (15:27:24:247)類型信息:System.Runtime.InteropServices.COMException (15:27:24:247)消息:從HRESULT異常:0x800AC472 (十五時27分24秒:253)堆棧跟蹤:在System.RuntimeType.ForwardCallToInvokeMemb ER(字符串成員名稱,標誌的BindingFlags,對象目標,的Int32 [] aWrapperTypes, MessageData & MSGDATA) 在Microsoft.Office.Interop.Excel.Range.set_Value(對象RangeValueDataType , Object) 錯誤代碼:-2146777998

+0

VBA_E_IGNORE,非常不愉快。這是一個重入問題,Excel正在內部等待操作完成。在等待時,它無法幫助您獲得您的請求,但無法執行它,因爲它很忙。追溯你的步驟,考慮你在肚子痛之前要求它做些什麼。 – 2011-06-17 00:57:07

回答

0

我的猜測(沒有看到您的代碼)是您可能會遇到COM對象通過.NET interop使用時被釋放的方式。快速介紹請參閱this article

本質上,可能發生的情況是您的代碼創建的所有COM對象實際上都包裝在.NET對象中。這些.NET對象最終會在不可預知的時間被垃圾收集器處置。當它們被丟棄時,底層的COM對象被釋放。在某些情況下,當垃圾收集發生時,這可能導致崩潰,其中底層COM對象已被Excel銷燬。

從.NET驅動Office比從VB6等舊技術驅動它更困難,正是因爲這個問題。 (你可能碰到的另一個問題是Excel進程沒有終止 - 你會在SO上看到很多關於這個問題的問題)。

PS。要開始,在SO上搜索ReleaseComObject ...