Hace unos meses una empresa deseaba montar una aplicación de proyecciones económicas de tarifas. Asterysco se encargó de llevar eso a la realidad pero encontró un problema muy fuerte. El economista que había hecho el modelo lo había montado en un archivo excel absurdamente grande y desordenado. Empezamos a dimensionar el modelo económico a sacar los métodos, las validaciones que habría que hacerle al algoritmo y nos dio una cantidad de horas y de dinero que no eran concebibles para nuestro cliente.

La solución es algo fuera de los parámetros establecidos por… bueno no sé por quién. Pero siempre sucede que hay gente tan Open Mind que les resulta más allá de su Openess algunas cosas. Decidimos que el archivo lo revisaríamos, arreglaríamos el tema de parámetros y de salida de resultados, ordenaríamos las hojas y al final los procesos de la aplicación se apoyarían en el archivo excel que había hecho el economista a cargo. A favor teníamos que era una aplicación interna con máximo 32 usuarios registrados y unos 5 administradores, el hardware de los servidores era más que suficiente.

La cuestión acá no es explicar como se usa la librería Microsoft.Office.Interop o el acceso por OLEDB, no. Hay dos errores extraños que le hacen a uno la vida de cuadritos mientras programa y por supuesto al momento de hacer la isntalación.

El primero:

Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005.

Es hora de bajarle al pánico. Esta retahíla apenas inteligible quiere decir una cosa muy sencilla: Excel no puede ser ejecutado por una aplicación. Él normalmente arranca cuando le damos doble click al icono. En este escenario es la aplicación .Net la que lo va a ejecutar. La solución es truculenta pero fácil y prefiero dejar el enlace de la página que me ayudo en su momento, está explicada sobre Windows XP pero es igual para Windows Vista, nunca probamos esa app en Win 7 durante el desarrollo, salió un poco después:

Solución

El segundo:

“Operation must use an updateable query” ó “La operación debe usar una consulta actualizable”

Este es aún más confuso que el anterior. Uno nunca esta usando una consulta y menos actualizable. Pero la cuestión se debe entender así. NO tienes permisos para acceder al recurso, en este caso, el archivo excel. ¿Qué como es eso? Sencillo, a la carpeta donde está el archivo agrégale, en propiedades/seguridad, el usuario que se llama IUSR_[Machine Name], basta con buscar IUSR y listo, y asignarle control total sobre la carpeta. Esto permitirá leer y escribir en el archivo excel y dentro de la carpeta.

Uno puede tardar un rato buscando ésto en la web, ya está la solución y cada día hay más posts al respecto pero uno más no sobra. Esto es aplicable también si accedes a una BD Access. Como ven, es más sencillo de lo que parece. En resumen es asignar permisos para que la aplicación .Net pueda ejecutar excel (por favor recuerden matar la aplicación para no inundar el servidor de procesos de excel) y luego asignar permisos a la ubicación del archivo para que lo puedas abrir, guardar, etc.

Hasta pronto