2010-03-10 125 views
3

當我運行下面的代碼,我得到下面的異常:收到COMException(0x80010108 - RPC_E_DISCONNECTED)時關閉Excel.Workbook

''# NOTE: ExcelApp is a Private main form variable 
Dim ReportBooks As Excel.Workbooks = ExcelApp.Workbooks 
Dim ReportBook As Excel.Workbook = ReportBooks.Open(localFilename) 
Dim ReportSheet As Excel.Worksheet = ReportBook.Sheets("Report") 

''# Retreive data from sheet 

ReleaseCOM(ReportSheet) 
ReportBook.Close(True) ''# Error raised here 
ReleaseCOM(ReportBook) 
ReleaseCOM(ReportBooks) 
ERROR: 
COMException was unhandled 
The object invoked has disconnected from its clients. 
(Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED)) 

注:所有數據似乎已經retreived正確。

請幫我診斷並克服這個錯誤。

回答

6

RPC_DISCONNECTED ......可怕的 「調用已經與其客戶端斷開連接的對象」 的問題。造成這種情況的原因有很多,看起來你已經用Excel.覆蓋了全局變量問題。你可以把第一個ReleaseCOM(ReportSheet)低於ReportBook(Close)並運行它嗎?另外,請查看this

+0

不幸的是,換行導致錯誤和行之前沒有任何效果。試圖關閉工作表時程序仍然崩潰。 – Steven 2010-03-11 15:03:04

+0

男人,很抱歉聽到這個。我幾次處理這個問題,它總是像魔術一樣讓它工作。這裏的主要問題是,當你進入'ReportBook.Close(True)時,Excel不再管理ReportBook - 有些東西正在釋放它 - 因此是錯誤。您是否嘗試過在調試中添加WatchBook到ReportBook的代碼步驟? – 2010-03-11 15:12:05

+0

Got it!代碼步進工作。我的代碼不小心打開了同一個文件兩次,並關閉了兩次(好一次,然後在第二次關閉時崩潰)。謝謝你的幫助。 – Steven 2010-03-11 16:44:04

-2

我不能說基於你展示的代碼它失敗的原因。

你有沒有考慮過從使用COM Interop的Excel Automation切換到第三方組件?

可讓您加載Excel工作簿並獲取值/獲取格式化文本/重新計算公式/等等......沒有與COM Interop相關的麻煩。

如果您想自己嘗試,可以看到實時ASP.NET樣本here並下載免費試用版here

聲明:我自己的SpreadsheetGear LLC

+7

你必須做你的定價。組件1000美元就是錯的。 – nightcoder 2010-04-27 21:42:57

+1

如果你確定使用xlsx,那麼EPPlus就是免費的! https://epplus.codeplex.com/ – 2014-08-07 08:33:47