¿Alguien tiene un buen ejemplo de cómo controlar múltiples instancias de Excel desde una aplicación .Net?

StackOverflow https://stackoverflow.com/questions/87576

  •  01-07-2019
  •  | 
  •  

Pregunta

Contamos con una aplicación basada en Excel 2002/XP que interactúa con SQL 2000/5 para procesar cálculos actuariales bastante complejos.La aplicación cumple bien su función, pero es difícil de manejar.

Estamos intentando crear una aplicación o servicio de "controlador" que pueda administrar y monitorear estas diversas instancias de Excel (comandos de inicio/detención/procesamiento, etc.), pero desafortunadamente es una pesadilla de InterOp.

¿Alguien tiene un bien (es decir,funcionando) ¿ejemplo de hacer algo como esto en VB.Net o C#?

¿Fue útil?

Solución

¡No lo hagas!

Intentamos durante semanas que algo así funcionara y simplemente no se comporta como se anuncia.¡Ni siquiera empieces, ríndete inmediatamente!

Las únicas opciones que realmente tiene es una implementación pesada basada en MOSS del lado del servidor: servicios de Excel (Web) (lo llaman así).La interoperabilidad COM Excel basada en Windows está prácticamente muerta y será reemplazada por MOSS.

La otra opción es utilizar SpreadsheetGear.En realidad es un producto fantástico.

  1. Es ligeramente rápido
  2. El motor está separado de la interfaz de usuario, por lo que puede usarlo para realizar tareas de Excel en el lado del servidor (sin Office instalado).
  3. Bastante barato
  4. Tiene una API similar a la API COM de Excel existente, por lo que mover el código es relativamente fácil.

Todo depende de las fórmulas que necesites en tu hoja de cálculo.Eche un vistazo a la lista de fórmulas de Spreadsheet Gear y, si hay una coincidencia, hágalo.

Otros consejos

La interoperabilidad funciona bien excepto que siempre terminas con referencias a objetos de Excel que no se publican, por lo que las instancias de Excel no se cierran.El siguiente artículo de KB explica por qué:

http://support.microsoft.com/default.aspx/kb/317109/EN-US/

Puede evitar el problema si ha escrito código con mucho cuidado para un conjunto limitado de escenarios de interoperabilidad.Pero en el caso general es muy difícil conseguir que funcione de forma fiable.

Quizás quieras echarle un vistazo a este producto: http://www.spreadsheetgear.com/products/spreadsheetgear.net.aspx

Todo es código administrado y bibliotecas .NET directas.Sin dolores de cabeza para InterOp.Yo no lo he usado, pero he oído cosas muy buenas de gente del mundo de las finanzas.

Hemos escrito un servicio que controla una única instancia de Excel 2003.Nunca logramos que las instancias de Excel se cerraran limpiamente, por lo que iniciamos una instancia cuando se accede al servicio por primera vez y usamos solo esa, serializando las solicitudes de los clientes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top