Взаимодействие с Excel - удаленный вызов процедуры не выполнен или RPC_E_SERVERFAULT

7112
xarx

У нас есть приложение на C #, которое внутренне вызывает Excel. Это делается с помощью Microsoft.Office.Interop.Excel.dll. Приложение работает на большинстве компьютеров с Excel, но не на моем.

Первоначально сбой приложения с HRESULT 0x800706BE (удаленный вызов процедуры не выполнен). Я попробовал почти все советы, найденные в Интернете, но безуспешно. Затем я удалил свой MS Office 2013 Pro и установил Office 365 v2013. Приложение по-прежнему не работает в той же строке кода, но теперь с HRESULT 0x80010105 (RPC_E_SERVERFAULT).

Есть ли какой-нибудь совет, который вы можете дать, чтобы совместимость с Excel работала? Я предполагаю, что некоторые службы Windows не запущены или компонент DCOM не зарегистрирован. Но я не знаю какой.

Подробности:

  • Windows 7 x64, MS Office 2013 Pro / 365 ProPlus
  • Это приложение на C #. Он скомпилирован с VS2010 для .NET 4.0, но проблема проявляется даже тогда, когда приложение скомпилировано с VS2012 для .NET 4.5. С использованием разных версий Microsoft.Office.Interop.Excel.dll.

Есть три факта, которые я считаю важными:

  • Приложение работает на других компьютерах, поэтому причиной проблемы является не приложение.
  • Приложение не работает даже после переустановки (немного другой версии) excel (2013), поэтому, вероятно, это не проблема самого Excel.
  • Я использовал ProcessMonitor от SysInternals, чтобы выяснить, что приложению действительно удается создать экземпляр Excel, и Excel успешно (?) Читает файл .xlsx. Но тогда преуспеть не удается.

Я также использовал отладчик VS2010, чтобы узнать, что происходит:

  • Это ядро ​​кода. Сбой на последней строке в Open:

    using Excel = Microsoft.Office.Interop.Excel; object misValue = System.Reflection.Missing.Value;  Excel.Application myExcelApp = new Excel.Application(); myExcelApp.Visible = false; myExcelWorkbooks = myExcelApp.Workbooks; myExcelWorkbook = myExcelWorkbooks.Open(xlsxFileFullPath, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue); 
  • В журнале событий Windows нет ничего релевантного (в момент сбоя приложения).

  • Вот некоторые из ссылок, которые я нашел, но не дано никаких предложений, или они не помогли: link1, link2, ... (не может опубликовать более 2 ссылок)
3

2 ответа на вопрос

8
xarx

После долгих исследований мне удалось решить эту проблему благодаря этой ссылке . По сути, проблема была вызвана сторонним плагином Excel COM, в моем случае это была «Надстройка FoxitReader PDF Creator COM». После его отключения проблема исчезла!

Как отключить плагин: Excel> Файл> Параметры> Надстройки> Управление, затем выберите «Надстройки COM»> Перейти. А затем снимите флажок с проблемного плагина.

Огромное спасибо! это было это! Для любого моего французского коллеги, ищущего французскую ошибку: échec de l'appel de procédure distante Simon 7 лет назад 0
Как, черт возьми, ты это понял? Спасибо! Jason Washo 6 лет назад 0
1
Thomas Bailey

У меня была та же проблема, что и у xarx. Внезапно созданное мной приложение перестало работать на определенных компьютерах. Код, на котором он падал, был:

Dim fname As String = "B:\Data Warehouse\Lists\WarehouseLists.xls" Try xlWorkBookList = xlAppLists.Workbooks.Open(fname,, False) 'open the raw data sheet Catch ex As Exception MessageBox.Show(ex.Message) Exit Sub End Try 

Отключение надстройки Foxit Reader немедленно решило проблему.