System.Runtime.InteropServices.COMException (0x800A03EC)
Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs()
Метод работает нормально на Windows Server 2003, а также на XP, но не на Windows Server 2008. Я скопировал его, как он дал все Dll и разрешения
Я также попробовал все решения, представленные в сети, такие как настройки культуры и разрешение DCOM.
Получение следующей ошибки:
System.Runtime.InteropServices.COMException (0x800A03EC): исключение из HRESULT: 0x800A03EC
в
Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs(имя файла объекта, формат файла объекта, пароль объекта, объект WriteResPassword, объект ReadOnlyRecommended, объект CreateBackup, XlSaveAsAccessMode AccessMode, объект ConflictResolution, объект AddToMru, объект TextCodepage, объектный объектный текстовый объект, объектный текстовый объект)
Пожалуйста помоги..!
11 ответов
Найден ответ.......!!!!!!!
Официально Microsoft Office 2003 Interop не поддерживается Microsoft на Windows Server 2008.
Но после многих перестановок и комбинаций с кодом и поиском мы нашли одно решение, которое подходит для нашего сценария.
Решение состоит в том, чтобы устранить разницу между тем, как Windows 2003 и 2008 поддерживает структуру папок, потому что Office Interop зависит от папки рабочего стола для промежуточного открытия / сохранения файла. В системе 2003 находится папка рабочего стола в systemmprofile, которая отсутствует в 2008 году.
Поэтому, когда мы создаем эту папку в 2008 году в соответствующей иерархии, как указано ниже; Офис Interop может сохранить файл по мере необходимости. Эта папка рабочего стола должна быть создана в
C:\Windows\System32\ Config\systemprofile
А ТАКЖЕ
C:\Windows\SysWOW64\ Config\systemprofile
Это сработало для меня...
Также проверьте, установлен ли.NET 1.1, потому что он необходим Interop и не предустановлен Windows Server 2008.
Или вы также можете использовать метод SaveCopyas(), который просто принимает аргумент в качестве строки имени файла)
Спасибо, парни..!
Попробуйте это, так как у меня получилось...
- Перейдите в "Пуск" -> "Выполнить" и введите "dcomcnfg"
- Откроется окно служб компонентов, разверните "Корень консоли" -> "Компьютеры" -> "Конфигурация DCOM".
- Найдите "Приложение Microsoft Excel" в списке компонентов.
- Щелкните правой кнопкой мыши на записи и выберите "Свойства"
- Перейдите на вкладку "Идентичность" в диалоговом окне свойств.
- Выберите "Интерактивный пользователь".
Предоставлено Последний абзац, упомянутый здесь
Некоторый поиск в Google показывает, что потенциально у вас есть поврежденный файл:
http://bitterolives.blogspot.com/2009/03/excel-interop-comexception-hresult.html
и что вы можете сказать Excel, чтобы открыть его в любом случае с параметром CorruptLoad, с чем-то вроде...
Workbook workbook = excelApplicationObject.Workbooks.Open(path, CorruptLoad: true);
Я видел ту же ошибку при попытке сохранить файл Excel. Код работал нормально, когда я использовал MS Office 2003, но после обновления до MS Office 2007 я начал видеть это. Это могло произойти каждый раз, когда я пытался сохранить файл Excel на сервере или в удаленном общем доступе.
Мое решение, хотя и элементарное, сработало хорошо. Я только что программа сохранила файл локально, как на диске C:\ пользователя. Затем используйте метод "System.IO.File.Copy(File, Destination, Overwrite)" для перемещения файла на сервер. Затем вы можете удалить файл на диске C:\.
Прекрасно работает и просто. Но по общему признанию не самый изящный подход.
Надеюсь это поможет! У меня было множество проблем с поиском каких-либо решений в Интернете, пока эта идея не пришла мне в голову.
Это проблема разрешения, когда IIS работает, у меня была эта проблема, и я решил ее таким образом
Я пошел по папкам
C:\Windows\ System32\config\SystemProfile
а также
C:\Windows\SysWOW64\ Config \ SystemProfile
Защищены системные папки, они обычно имеют блокировку.
Щелкните правой кнопкой мыши-> Безопасность карты-> Нажмите Правка-> Добавить untente "Пользователь Autenticadet" и назначьте права доступа.
На данный момент все решено, если у вас все еще есть проблемы, попробуйте дать все разрешения "Все"
Для всех тех, кто все еще испытывает эту проблему, я просто потратил 2 дня, чтобы разыскать кровавую вещь. Я получал ту же ошибку, когда в наборе данных не было строк. Кажется очевидным, но сообщение об ошибке очень неясно, следовательно, 2 дня.
Странное решение, на которое я наткнулся, состоит в том, чтобы посмотреть, есть ли какие-либо процессы Excel, работающие в фоновом режиме. Убедитесь, что код действительно убирает за собой и закрывает все процессы Excel.
У меня была эта проблема из-за пути к файлу excel, и всякий раз, когда я пытался открыть файл excel, я получал сообщение об ошибке (т.е. мой файл excel имел длинный путь, например C:\Users\Blabla\Blabla\MyVeryLongFolderHierarchyPath\MyExcelFile.xlsx)
Решение заключалось в том, чтобы напрямую перенести мой файл excel по более короткому пути к файлу (например, C:\MyExcelFile.xlsx). Я не могу поверить, что такая глупая проблема возникает из-за длинных путей к файлам в 2021 году.
В моем случае проблема заключалась в стилизации заголовка как "Заголовок 1", но этого стиля не было в Word, и я получаю сообщение об ошибке, потому что это не Office на английском языке.
Я обнаружил ту же проблему в своем коде, вызванную вводом неверных формул. Моя система настроена на немецкий язык, но в этом случае мне фактически нужно ввести формулу Excel на английском языке. При последующем открытии документа формула снова отображается на немецком языке.
Я получил это исключение при записи в ячейки моей книги. Проблема заключалась в том, что ячейки индексируются с 1, а не с 0:
Плохой:
activeSheet.Cells[0, 0].Value = 1;
Хороший:
activeSheet.Cells[1, 1].Value = 1;