как решить Исключение: вызов был отклонен вызываемым абонентом. (Исключение из HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)) в С#?

Я написал код С# в консольном приложении, чтобы открыть два excel и скопировать и вставить данные из одного excel в другой excel. Он работал нормально, пока видимость целевого Excel не стала истинной. Но мне нужно скрыть excel во время выполнения. Поэтому я изменил видимость на false. Нравиться,

  _destExcelApp = new Excel.ApplicationClass();
  _destExcelApp.Visible = false;

Теперь он показывает исключение, например

Вызов был отклонен вызываемым абонентом. (Исключение из HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))

Как решить эту?


person Manoj Nayak    schedule 11.12.2013    source источник
comment
вы пробовали с: ... = new Excel.Application();??   -  person Kazimierz Jawor    schedule 11.12.2013
comment
Вы где-нибудь используете .Activate или .Select? Какая строка дает вам ошибку?   -  person Siddharth Rout    schedule 11.12.2013
comment
Мне нужен ApplicationClass для запуска макроса в Excel назначения. ApplicationClass и Application одинаковы?   -  person Manoj Nayak    schedule 11.12.2013
comment
Нет, я не использовал такие вещи. Ошибка возникает при получении всех рабочих листов в excel, т.е. excelSheets = _destExcelWorkbook.Worksheets;   -  person Manoj Nayak    schedule 11.12.2013


Ответы (13)


Я столкнулся с той же ошибкой, когда развернул свое приложение на машине без полностью активированной и лицензированной установки Excel. Я потратил часы, пытаясь диагностировать проблему. Убедитесь, что вы проверили свои установки Office, чтобы убедиться, что они завершены.

person Crash5998    schedule 19.02.2014
comment
Итак, вы предполагаете, что исключение возникает из-за неактивированного и нелицензионного Excel, и что его активация решит эту проблему. Звучит странно. Кстати, добро пожаловать в Переполнение стека. - person Bleeding Fingers; 20.02.2014
comment
@BleedingFingers, да. Я столкнулся с ситуацией, когда выбрасывалось это исключение, а другая функция моего приложения выдавала отдельную ошибку, связанную с режимом ограниченной функциональности. Переустановка и активация Excel решили обе проблемы. - person Crash5998; 25.02.2014
comment
У меня была такая же проблема с неактивированной версией Excel. Я думаю, что в целом это вызвано тем, что Excel был занят в то время, когда вы его вызываете - это может быть потому, что он пытается показать диалоговое окно с предупреждением о том, что у вас нет действующей лицензии, или, может быть, вы пытаетесь открыть электронную таблицу со ссылками и связанная электронная таблица недоступна и т. д. Я думаю, что в целом решение состоит в том, чтобы реализовать IMessageFilter, как упоминалось выше (я еще не пробовал). Я работал над этим, открывая электронные таблицы только для чтения, с отключенными ссылками и т. Д. - person David Waterworth; 26.02.2014
comment
К сожалению, это относится не ко всем случаям. Мой Excel зарегистрирован, и я получаю указанную ошибку. - person Leo Gurdian; 25.02.2021

Я решил это поведение с помощью этого вопроса:

Странное поведение вызова было отклонено вызываемым абонентом. исключение с Excel

Проблема была просто в том, что Workbook.Open не закончился, когда я дал команду Worksheet.SaveAs. Так что иногда скрипт работал, иногда нет.

Я просто добавил в скрипт паузу после Workbook.Open и все заработало. Затем я нашел свойство Ready, которое позволило мне сделать именно то, что я хотел:

    $excel = New-Object -ComObject "Excel.Application" -ea Stop
    $wb = $excel.Workbooks.Open($workbook)
    $sheet = $wb.Sheets("List")
    while (-not $excel.Ready) {
        sleep 1
    }
    $sheet.SaveAs($csvpath,6)

Так что в моем случае это не имело ничего общего с неактивированными или поврежденными установками Excel.

person Joost    schedule 10.01.2019

Убедитесь, что в MS Word/Excel не отображается диалоговое окно, требующее ответа.

Я установил точку останова на строке, вызвавшей сбой, затем установил .Visible в значение true в PowerShell, чтобы найти это:

$word.Visible = $true

MS Word Установить приглашение программы по умолчанию

После того, как я нажал «Да» и обновил настройки, после того, как я повторно запустил свои скриптовые COM-взаимодействия, они преуспели.

person CJBS    schedule 09.01.2018
comment
Да, спасибо, некоторые из моих пользователей DocxManager (менеджер документов для MS Word с тегами, вкладками и т. д.) сообщили об ошибке Call was rejected by callee в таких ситуациях. Это должно быть корнем такой проблемы, а не тем, что Word не является программой по умолчанию, как описано в другом ответе. - person Edwin Yip; 12.12.2019
comment
Это происходит со мной в Windows 10. Когда я нажимаю «Да», мне просто говорят, что я должен сделать это сам в настройках. Я не знаю, какие расширения, кроме doc и docx, он хочет. Это глупо. - person Arrow_Raider; 01.06.2020
comment
@Arrow_Raider - конфигурация не имеет значения; важно то, что диалоговое окно не отображается (потому что оно мешает автоматизации). Когда появится диалоговое окно, независимо от вашего ответа, обязательно выберите «Больше не показывать это сообщение», тогда оно не будет блокировать будущие автоматические запуски MSWord. - person CJBS; 01.06.2020
comment
Я смог обойти эту ошибку, открыв программу (в моем случае MS Project 2013) как локальную системную учетную запись (поскольку это пользователь службы) и пройдя через диалоговые окна настройки программы по умолчанию, а затем закрыв ее. Чтобы открыть его в качестве учетной записи локальной системы, я использовал technet.microsoft.com/en-us/ sysinternals/bb897553 и открыл командную строку (от имени администратора), а затем ввел следующую команду: psexec -s -i "C:\Program Files (x86)\Microsoft Office\root\Office15\WINPROJ.EXE" Исполняемым файлом будет любая программа, в которой возникла проблема. - person Mitch; 22.06.2020

Я столкнулся с той же ошибкой, и многие предложенные решения не работали для меня. У меня было приложение, работающее в Windows 8, и я обнаружил, что проблема заключалась в том, что Excel всегда просил выбрать приложение по умолчанию для расширений «xlsx». При запуске приложения диалоговое окно не появлялось, просто показывалась ошибка.

Я решил проблему, выбрав Панель управления> Программы> Программы по умолчанию и установив Microsoft Office Excel 2016 в качестве программы по умолчанию для файлов xlsx.

person Alielson Piffer    schedule 05.06.2017
comment
РЕЗЮМЕ: Таким образом, по ответам здесь мы можем сделать вывод, что эта ошибка может возникать, когда Excel показывает какое-либо сообщение во всплывающем окне, например, «Это программное обеспечение не активировано» или «Вы хотите, чтобы Excel был приложением по умолчанию для файлов DOCX?». - person Elmue; 13.06.2017
comment
Ага! Я думаю, что проблема именно в этом, @Elmue. Хотя для Excel должны быть файлы XLSX. :) - person Alielson Piffer; 13.06.2017
comment
Ты прав. Вопрос касается Excel, а не Word. - person Elmue; 15.06.2017
comment
На самом деле моя проблема возникла, когда я работал с файлом Word. Но поскольку проблема, по-видимому, одинакова для файлов Office, я согласен, что было бы проще, если бы я вместо этого просто сказал об Excel. Спасибо за помощь, @Elmue! :D - person Alielson Piffer; 21.06.2017

Я столкнулся с этой проблемой в Word, и моим решением было удаление OpenOffice. Я не уверен, есть ли другое решение, но, скорее всего, это связано с dll и конфликтом с обработчиком файлов по умолчанию для конкретных файлов, которые вы создаете программно.

person amadib    schedule 12.05.2015
comment
Вероятно, вы не проанализировали эту проблему досконально. OpenOffice не зависит ни от DLL из Microsoft Office, ни наоборот. Так что ваш вывод о конфликте DLL, безусловно, неверен. Вероятно, произошло то, что Excel спросил вас, хотите ли вы открывать файлы XLSX с помощью Microsoft Excel, потому что вашей программой по умолчанию для файлов XLSX был OpenOffice. Посмотрите ответ Элиелсона Пиффера, который решил эту проблему, не удаляя OpenOffice. Всякий раз, когда Excel открывает всплывающее окно при запуске, вы можете получить сообщение об ошибке RPC_E_CALL_REJECTED, VBA_E_IGNORE или DISP_E_EXCEPTION. - person Elmue; 15.06.2017

Столкнулся с этой проблемой на своей машине. Excel полностью активирован и уже является программой по умолчанию для файлов .xlsx. Я загружал шаблон рабочей книги, который я создал со сводными таблицами, и скрипт обновлял данные в таблицах. Оказывается, если для сводных таблиц установлено значение «Обновлять данные при открытии файла» в разделе «Параметры сводной таблицы» > «Данные», это вызывает некоторые проблемы с потоками.
Отключение обновления при открытии решило проблему.

person Ghostnine22    schedule 13.11.2018

В моем случае я просто перезагрузил свою машину и обнаружил, что ожидается обновление Windows. Перезапуск машины решил мою проблему.

person Ritzies    schedule 05.04.2019

Я согласен с теми, кто говорит, что лицензия excel должна быть активирована, у меня была такая же проблема, и я активировал лицензию, все работает нормально - Papiki

person user12964471    schedule 26.02.2020

Вы копируете диапазон информации из одного документа в другой или перемещаетесь между двумя документами, копируя ячейку за ячейкой? Excel является однопоточным, поэтому, если вы будете перемещаться вперед и назад, это может вызвать эту проблему.

person Duphorn    schedule 11.12.2013
comment
Этот ответ - нонсенс. Совершенно не проблема работать с несколькими листами в автоматизации Excel. - person Elmue; 13.06.2017

Я столкнулся с этой ошибкой сегодня в Excel 2016.

Мы обнаружили, что на компьютере с этой проблемой были активированы некоторые надстройки.

Странно, что одному компьютеру понадобилась целая вечность, чтобы начать работать в Excel. после деактивации надстроек наша программа заработала нормально.

Странно, но мы не смогли воспроизвести это на наших компьютерах для разработчиков.

person Martin H.    schedule 06.02.2018

У меня точно такая же проблема. Я запускал программу на Windows XP x86, и она вылетала с аналогичной ошибкой. Проблема была в строке:

sheetSource.Cells(i, iColumn).Interior.Color = RGB(255, 255, 0)

Многократное выполнение этой строки приводило к сбою. Когда я удалил его сразу, все стало работать нормально.

person Pavel    schedule 15.01.2021

Я могу предложить еще одну вещь, на которую следует обратить внимание в дополнение к приведенным выше решениям, которые, похоже, сходятся в этом комментарии (в ответе Элиелсона Пиффера),

SUMMARY: So by the answers here we could conclude that this error may occur when Excel is showing any message in a popup window like for example "This software is not activated" or "Do you want Excel to be the default application for DOCX files?". – Elmue Jun 12 '17 at 22:43

Не было открытых окон сообщений или подсказок, но в диспетчере задач был незавершенный процесс (в моем случае Word.exe), который мне нужно было завершить. Это исправило это.

Это объясняет, почему перезагрузка помогла другому пользователю.

person M H    schedule 05.06.2020

Убедитесь, что вы проверили свои установки Office, чтобы убедиться, что они завершены.

в противном случае попробуйте следовать

попробуйте видимость приложения false после того, как все данные будут записаны, затем включите Visibility ex Dim wapp As new excel.Application .... . . wapp.Visible = ложь

'делай свое письмо ... . . . .

'тогда включите видимость

wapp.Visible = Истина

person Deepak Sharma    schedule 12.06.2020
comment
Пожалуйста, очистите свое предложение; очень трудно следить за тем, что вы говорите. - person Leo Gurdian; 25.02.2021