Я создал проект C # WinForms, который вычисляет числовые значения и записывает их в открытую электронную таблицу Excel. Программа работает, позволяя пользователю открыть электронную таблицу в программе Excel. Запись выполняется одним методом, называемым private void updateExcel_Click(object sender, EventArgs e)
, который пишет примерно так:
if (*in range*)
MySheet.Cells[activeRow, activeColumn].Value = total;
Этот подход работает как талисман, за исключением случаев, когда в. Под неподтвержденным изменением я подразумеваю, когда пользователь заходит непосредственно в электронную таблицу и меняет число в активной ячейке, не завершая изменение одним из:
- нажатие ввода
- нажатие на вкладку
- нажатие клавиши со стрелкой
- щелкнув в другом месте
Когда я снова пишу в уязвимую ячейку с помощью программы, я получаю ошибку System.Runtime.InteropServices.COMException. Полный текст:
Исключение: 'System.Runtime.InteropServices.COMException' в System.Dynamic.dll
Произошло необработанное исключение типа «System.Runtime.InteropServices.COMException» в System.Dynamic.dll
Вызов был отклонен вызываемым абонентом. (Исключение из HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))
Как ни странно, когда прямое изменение пользователя завершается одним из маркированных методов, я не получаю ошибки при перезаписи в ячейку с программой.
Как мне исправить мою программу, чтобы избежать ошибки COMException?
Я уже пытался перейти по ссылке msdn: Как исправить ошибку «Вызов был отклонен вызываемым абонентом» . Я вызвал метод C # updateCell_Click из поля с надписью «Вставьте сюда свой код автоматизации».