2010-03-10 2 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

+0

Человек, извините, что услышал это. Я занимался этим вопросом несколько раз, и это всегда было похоже на колдовство, чтобы заставить его работать. Основная проблема здесь заключается в том, что к тому времени, когда вы дойдете до «ReportBook.Close (True)» Excel больше не управляет ReportBook - что-то его освобождает - отсюда и ошибка. Пробовали ли вы код с помощью отладки, добавляя часы в ReportBook? –

+0

Получил! Наступил кодовый шаг. Мой код случайно открыл один и тот же файл дважды и дважды закрыл его (хорошо, а затем разбился при закрытии второго раза). Спасибо за вашу помощь. – Steven

-2

Я не могу сказать, почему он не работает на основе кода, который вы показываете.

Рассматривали ли вы переход от Excel Automation с помощью COM Interop к стороннему компоненту?

позволит загружать книги Excel и получать значения/получать форматированный текст/пересчитывать формулы/и т. Д. Без проблем, связанных с COM Interop.

Вы можете увидеть прямые образцы ASP.NET here и загрузить бесплатную пробную версию here, если вы хотите попробовать сами.

Отказ от ответственности: У меня есть SpreadsheetGear ООО

+7

Вы должны сделать что-то с вашей ценой. $ 1000 для компонента просто неправильно. – nightcoder

+1

Если вы нормально работаете с xlsx, тогда есть EPPlus, который является бесплатным! https://epplus.codeplex.com/ –

Смежные вопросы