Excepción al abrir el file de Excel en C # con Interop

Tengo un progtwig ejecutándose en un server que descarga un file .xls de un website todos los días, lo abre y luego lo convierte en .csv para poder analizarlo correctamente y agregarlo a una database.

Cuando lo ejecuto en mi PC local todo funciona bien y funciona la mayor parte del time también en el server, pero tal vez una o dos veces por semana obtengo esta exception:

Se produjo una exception: System.Runtime.InteropServices.COMException (0x800A03EC): Excepción de HRESULT: 0x800A03EC en Microsoft.Office.Interop.Excel.Workbooks.Open (String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin, Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad

Aquí hay un fragment de código:

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); 

He leído muchas cosas en línea, muchas soluciones mencionan la configuration de security, pero no creo que este sea el caso conmigo, de lo contrario no funcionaría en absoluto. La gente también ha mencionado que el file está corrupto. Realmente no estoy seguro Cualquier ayuda sería muy apreciada.

ACTUALIZAR:

Excel está instalado en el server y la exception se produce cuando se intenta abrir el file.

Ejecutar> dcomcnfg

Esto abrirá los Servicios de componentes y se desplazará a Root de console \ Servicios de componentes \ Equipos \ Mi computadora \ Configuración de DCOM \ Aplicación de Microsoft Excel Haga clic con el button derecho en Aplicación de Microsoft Excel y select Propiedades

Haga clic en la pestaña Identidad y marque la selección.

Funciona para mí cuando selecciono la opción – El usuario interactivo

Por favor, intenta, mejor suerte !!

.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 );

Tengo el mismo problema. Se relaciona específicamente con la new Microsoft.Office.Interop.Excel.Application(); y lo que he estado haciendo es crear el file en una location temporal donde sé que no tengo ningún problema de permiso. Una vez que he terminado de crear el documento, lo muevo al destino final y elimino el file creado en mi location temporal.

Hasta ahora no he tenido ningún problema.

Sugiero que cree un file de logging y lo guarde por date, donde puede registrar los pasos que completa a lo largo de su código. De esta forma puedes ver dónde falla.

Si es posible también, haga un Process.Kill() en excel si esta es la única aplicación que requiere Excel. Esto ayuda si Excel.exe no se cierra correctamente.

Final, como se indica en los comentarios anteriores, la automation de Excel en el server no es compatible. Yo recomendaría search en SSIS para la automation de Excel.

ACTUALIZAR:

Asegúrese de probar si la aplicación se ejecuta aunque ningún usuario haya iniciado session. Es posible que necesite establecer la identidad DCOM para que Microsoft Excel se ejecute como una count de usuario específica y no como el usuario interactivo.

Ir:

Panel de control \ Todos los elementos del panel de control \ Herramientas administrativas

Haga clic en

Servicios de componentes y navegue hasta Console Root \ Component Services \ Computers \ My Computer \ DCOM Config \ Microsoft Excel Application

Haga clic derecho en la aplicación Microsoft Excel y select Propiedades

En la pestaña Seguridad, configure Personalizar en todos y otorgue acceso a Todos (para testings)

En la pestaña Identidad, configure Este usuario y select la count apropiada (la misma count que el Progtwigdor de tareas está usando para ejecutar su aplicación)

¡Buena suerte!

¿Has verificado si es un problema de permiso? Es posible que intente save el file en una location y .NET no tenga los permissions para escribir en esa location.