Исключение при открытии файла Excel в C # с помощью Interop - PullRequest
9 голосов
/ 30 января 2012

У меня есть программа, работающая на сервере, которая ежедневно загружает файл .xls с веб-сайта, открывает его, а затем преобразует в файл .csv, чтобы иметь возможность правильно его проанализировать и добавить в базу данных.

Когда я запускаю его на своем локальном ПК, все работает нормально и большую часть времени работает на сервере, но, возможно, один или два раза в неделю я получаю следующее исключение:

Исключение: System.Runtime.InteropServices.COMException (0x800A03EC): Исключение из HRESULT: 0x800A03EC в Microsoft.Office.Interop.Excel.Workbooks.Open (имя файла строки, объект UpdateLinks, объект ReadOnly, формат объекта, пароль объекта, объект WriteResPassword, объектный объект, IgnoreReadOnlyReReRecomElylyRecome, ObjectRegncomRelyРазделитель, Редактируемый объект, Уведомление об объекте, Конвертер объектов, Объект AddToMru, Локальный объект, Объект CorruptLoad)

Вот фрагмент кода:

 Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook wbWorkbook = app.Workbooks.Open(_dir + _fileNameTrim + ".xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            wbWorkbook.SaveAs(_dir + _fileNameTrim + ".csv", Microsoft.Office.Interop.Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            wbWorkbook.Close(false, "", true);

Я много чего прочитал в Интернете, многорешения упоминают настройки безопасности, но я не думаю, что это так со мной, в противном случае это работаетУльдн работать вообще.Люди также упоминали, что файл поврежден.Я действительно не уверен.Любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ:

Excel установлен на сервере, и возникает исключение при попытке открыть файл.

Ответы [ 4 ]

9 голосов
/ 07 июля 2015

Выполнить> dcomcnfg

Это откроет службы компонентов и перейдет к корневому каталогу консоли. \ Службы компонентов \ Компьютеры \ Мой компьютер \ Конфигурация DCOM \ Приложение Microsoft Excel Щелкните правой кнопкой мыши Приложение Microsoft Excel и выберите Свойства

Нажмите на вкладку «Идентичность» и проверьте выбор.

У меня работает, когда выбираешь опцию - Интерактивный пользователь

Пожалуйста, попробуйте, удачи !!

4 голосов
/ 21 ноября 2013

.Workbooks.Open (strPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlCorruptLoad.xlExtractData );

1 голос
/ 29 мая 2014

У меня такая же проблема.Это определенно связано с new Microsoft.Office.Interop.Excel.Application();, и я занимался созданием файла во временной папке, где я знаю, что у меня нет проблем с разрешениями.Закончив создание документа, я перемещаю его в конечный пункт назначения, удаляя файл, созданный в моем временном местоположении.

Пока у меня не возникло никаких проблем.

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

Если возможно, также выполните Process.Kill() в Excel, если это единственное приложение, требующее Excel.Это помогает, если Excel.exe не закрывается должным образом.

Final, как указано в комментариях выше, автоматизация Excel на сервере не поддерживается.Я бы порекомендовал обратиться в SSIS для автоматизации Excel.

ОБНОВЛЕНИЕ:

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

Перейти к:

Панель управления \ Все элементы панели управления \Инструменты администрирования

Нажмите

Службы компонентов и перейдите в корневой каталог консоли \ Службы компонентов \ Компьютеры \ Мой компьютер \ Конфигурация DCOM \ Приложение Microsoft Excel

Щелкните правой кнопкой мыши по приложению Microsoft Excel и выберите Свойства

На вкладке Безопасность установите значение Настроить для всех и предоставьте доступ к Все (для тестирования)

На вкладке Identity установите This User и выберите соответствующую учетную запись (та же учетная запись, что и планировщик задач, используемый для запуска вашего приложения)

ХорошоУдача!

0 голосов
/ 30 января 2012

Вы проверили, если это проблема с разрешением? Возможно, вы пытаетесь сохранить файл в определенном месте, а у .NET нет прав на запись в это место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...