¿Hay una forma mejor (además de COM) para el control remoto de Excel?

Estoy trabajando en una herramienta de prueba de regresión que validará una gran cantidad de hojas de cálculo de Excel. En este momento los controlo a través de COM desde un script de Python usando la última versión del producto pywin32. Desafortunadamente, COM parece tener una serie de inconvenientes molestos:

Por ejemplo, el más mínimo malestar parece ser capaz de interrumpir la conexión con el servidor COM, una vez cortado, no parece haber una forma segura de volver a conectarse a la aplicación Excel. No hay absolutamente ninguna seguridad integrada en el objeto de la aplicación COM.

La interfaz de COM de Excel no me permitirá controlar de forma segura dos instancias separadas de la aplicación de Excel que opera en el mismo archivo de libro de trabajo, incluso si son de solo lectura.

Además, cuando algo sale mal, rara vez recibo mensajes de error útiles … en el mejor de los casos, excepto un código de error numérico o un mensaje apenas útil como “Se ha producido una excepción”. Es casi imposible saber por qué algo salió mal.

Finalmente, ¿COM no tiene la capacidad de controlar algunos de los aspectos más fundamentales de Excel? Por ejemplo, no hay manera de hacer un cierre garantizado del proceso de Excel al que está conectado un cliente COM. Ni siquiera puedes usar COM para encontrar el PID de Excel.

¿Y qué pasaría si abandonara por completo COM? ¿Hay alguna forma alternativa de controlar Excel?

Todo lo que quiero hacer es ejecutar macros, abrir y cerrar libros de trabajo y leer y escribir rangos de celdas. Tal vez algunos expertos en .NET conozcan uno o dos trucos que aún no hayan llegado a la comunidad de Python. ¿Qué hay de ustedes piratas informáticos? ¿Podría haber una mejor manera de llegar a las entrañas de Excel que COM?

No hay forma de que elude completamente a COM. Puede usar VSTO (Visual Studio Tools para Office), que tiene agradables envoltorios .NET en los objetos COM, pero sigue siendo COM debajo.

La interfaz de COM de Excel no me permitirá controlar de forma segura dos instancias separadas de la aplicación de Excel que opera en el mismo archivo de libro de trabajo, incluso si son de solo lectura.

Esto no es una limitación de COM, es una limitación de Excel . Excel ni siquiera le permitirá abrir dos archivos con el mismo nombre al mismo tiempo si existen en directorios diferentes. Es una limitación fundamental del progtwig de Excel.

Para responder a tus otras preguntas.

Si verifica la documentación de Python, debería haber una manera de conectarse a un servidor existente si se pierde la conexión.

La falta de mensajes de error útiles puede estar relacionado con Python.

Ni siquiera puedes usar COM para encontrar el PID de Excel.

COM es un modelo de objeto interno y expone lo que desea. Los PID están disponibles para los procesos externos tanto como para los internos, no hay ninguna razón real para exponerlos como una interfaz COM.

También es posible ejecutar Excel como una aplicación de servidor y usarlo como un motor de cálculo. Esto permite que los usuarios de TI no especifiquen reglas de negocios dentro de Excel y las llamen a través de servicios web. No he trabajado con esto yo mismo, pero sé que un compañero mío usó esto una vez. Tutorial: Desarrollar una aplicación personalizada utilizando Excel Web Services podría ser un buen punto de partida. Un primer vistazo a esa página parece que requiere Sharepoint. Esto podría no ser adecuado para todos los entornos.

¿Has mirado los paquetes xlrd y xlwt ? Ya no los necesito, pero tuve un gran éxito con xlrd en mi último proyecto. Lo último que supe fue que no podían procesar macros, pero podían leer y escribir de forma básica hojas de cálculo. Además, son independientes de la plataforma (el progtwig que escribí fue diseñado para ejecutarse en Linux).

Puede usar Jython con JExcelApi ( http://jexcelapi.sourceforge.net/ ) para controlar su aplicación de Excel. He estado considerando implementar esta solución con uno de mis proyectos de PyQt, pero aún no he llegado a intentarlo. He utilizado efectivamente JExcelApi en aplicaciones Java antes, pero no he usado Jython (aunque sé que puedes importar clases Java).

NOTA: el JExcelApi puede ser COM bajo el capó (no estoy seguro).