2009-04-07 28 views
11

Un cliente desea "habilitar por Internet" un cálculo de hoja de cálculo: el usuario especifica los valores de ciertas celdas y luego le muestra los valores resultantes en otras celdas.¿Cómo se usa Excel en el lado del servidor?

(que no quieren mostrar al usuario una interfaz "de hoja de cálculo". Esta no es una cuestión de interfaz de usuario.)

Tienen una enorme hoja de cálculo con una gran cantidad de cálculos sobre muchos, muchas hojas. Pero, al final, solo dos cosas importan: (1) colocas números en un par de celdas en una hoja, y (2) obtienes los números correspondientes de un par de celdas en otra hoja. El resto es una caja negra.

Quiero presentar una IU al usuario para ingresar los números que ellos quieren, entonces me gustaría abrir programáticamente el archivo de Excel, configurar los números, decirles que vuelvan a calcinar y leer el resultado.

¿Esto es posible/aconsejable? ¿Hay algún componente comercial que lo haga más fácil? Son sus trampas que no estoy considerando?

(Sé que puedo utilizar Office Automation para hacer esto, pero sé que no es recomendable hacer que del lado del servidor, ya que se trata de correr en el contexto de un usuario, etc.)

Editar : Mucha gente dice que necesito recrear las fórmulas en código. Sin embargo, esto sería asombrosamente complejo. Parece que esto podría ser un problema resuelto. ¿Alguien sabe de algún componente que lo haga por mí? Alguien tiene que haber creado algún sistema de generación de "fórmulas de Excel a código". Me encantaría pagar por ello.

Edición/Solución:SpreadsheetGear es lo que estaba buscando. Entre otras cosas, le permite usar un XLS como calculadora. Puede establecer los valores brutos de las celdas seleccionadas y luego leer los valores de las celdas calculadas. Exactamente lo que estaba buscando.

Respuesta

5

Definitivamente no desea utilizar la interoperabilidad en el lado del servidor, ya es suficientemente malo usarlo como un kludge en el lado del cliente.

puedo ver dos opciones:

averiguar la lógica hoja de cálculo. Esto puede beneficiarlo a largo plazo al hacer que la lógica comercial sea una cantidad conocida, y en el corto plazo puede encontrar errores en la hoja de cálculo (he encontrado toneladas de hojas de cálculo monstruosas utilizadas durante años que resultan sencillas). errores en ellos - todos simplemente asumieron que las respuestas deben ser correctas)

Evalúe SpreadSheetGear.NET, que es básicamente un reemplazo para la interoperabilidad que lo hace todo sin Excel (replica una gran parte de la lógica no visual de Excel y IO en .NET)

+0

El componente de SpreadsheetGear funcionó perfectamente, gracias. – Deane

+0

Es bueno escucharlo, realmente no lo he usado mucho para los cálculos de Excel. Lo usamos principalmente para importar y exportar archivos de Excel para aplicaciones de intranet, para lo cual es fanástico (mucho mejor que nuestras cosas de escritorio que todavía tienen código heredado de interoperabilidad) – David

0

Parece que está hablando de que el usuario tiene la hoja de cálculo abierta en su sistema local y desea que un sitio web manipule esa hoja de cálculo local.

Si ese es el caso, realmente no se puede hacer eso. Incluso la automatización de Office no será de ayuda, a menos que desee solicitarles que carguen la hoja en el servidor y descarguen una nueva versión alterada.

Lo que puedes hacer es crear un servicio web para hacer los cálculos y agregar algún código vba o vsto a la hoja de Excel para hablar con ese servicio.

+0

No, nada que ver con el lado del cliente. Básicamente quiero usar la hoja de cálculo como una calculadora transaccional en el servidor, una fórmula grande y complicada. – Deane

+0

Bien, te entiendo ahora. En ese caso, Randolpho lo cubre bastante bien. –

4

Aunque esto es ciertamente posible usando ASP.NET, es muy desaconsejable. Es poco escalable y propenso a errores de concurrencia.

Su mejor opción es analizar los cálculos de la hoja de cálculo y duplicarlos. Ahora, concedido, a su empresa no le va a gustar el tiempo que lleva hacer esto, pero (presumiblemente) les dará un sistema más útil.

Como alternativa, puede simplemente pasar la hoja de cálculo a los usuarios de su sitio web, en cuyo caso no hará casi nada.

Edit: Si sus partes interesadas realmente insisten en usar Excel en el lado del servidor, le sugiero que eche un buen vistazo a los servicios de Excel como @John Saunders sugiere. Es posible que no obtenga todo que desee, pero le servirá de mucho, y debería resolver algunos de los problemas que terminará tratando de hacerlo desde el lado del servidor con ASP.NET.

Eso no quiere decir que sea una panacea; su kilometraje sin duda variará. Y Sharepoint no es exactamente barato de comprar o mantener. De hecho, los costos a corto plazo podrían ser fácilmente eclipsados ​​por los costos a largo plazo si se toma la ruta Sharepoint, pero podría ser la mejor opción para cumplir con un requisito.

Aún sugiero que retroceda a favor de codificar toda su lógica en un módulo .NET separado. De esta forma, puede usarlo tanto en el lado del servidor como en el lado del cliente. Excel puede pasar fácilmente cálculos a un objeto COM, y puede publicar fácilmente su biblioteca .NET como objetos COM. Al final, tendrías una arquitectura mucho más fácil de mantener y usar.

+0

+1 También tendrá la posibilidad de probar sus cálculos unitarios. –

+0

Absolutamente. Si tiene más de uno o dos usuarios, entonces fácilmente podría estar buscando problemas. (Por lo menos, va a ser lento). Es mejor utilizar una tecnología diseñada para el acceso web concurrente. – andypaxo

+0

¿Me arriesgaría a problemas de concurrencia incluso si no estaba persistiendo nada en el archivo de Excel? No quiero guardar nada, solo quiero ingresar algunos datos, recalcular, leer algunos datos y luego abandonar. – Deane

7

Es posible, pero no es aconsejable (y oficialmente no es compatible).

Puede interactuar con Excel a través de COM o las Asambleas de interoperabilidad .NET primarias, pero esto debe ser un proceso del lado del cliente.

En el lado del servidor, no hay pantalla o escritorio disponible y cualquier cuadro de diálogo inesperado (por ejemplo) hará que su aplicación web se cuelgue – su aplicación se comportará escamosa.

Además, adjuntar un proceso de Excel a cada solicitud no es exactamente un enfoque de bajo recurso.

Elaborar la caja negra y volver a implementarla en un lenguaje de programación adecuado es claramente la mejor (como en la opción "más confiable y más rápida").

Lectura relacionada: KB257757: Considerations for server-side Automation of Office

+0

Excelente discusión de los problemas. +1 – Randolpho

1

Despreciando la discusión de si tiene sentido para manipular una hoja de Excel en el lado del servidor, una manera de realizar esta probablemente parecerse a la adopción de la Microsoft.Office.Interop

.Excel.dll

Utilizando esta biblioteca, puede indicar a Excel que abra una hoja de cálculo, cambie y lea los contenidos de .NET. He utilizado la biblioteca en una aplicación WinForm, y supongo que también se puede usar desde ASP.NET.

Sin embargo, tenga en cuenta los problemas de concurrencia ya se ha dicho ... Sin embargo, si la hoja se accede pocas veces, por qué no ...

1

La forma más sencilla de hacer esto podría ser:

Sube el Excel Libro de trabajo para Google Docs: esto está muy limpio, en mi experiencia

Utilice la API de datos de hoja de cálculo de Google para actualizar los datos y devolver los números.

Aquí hay un enlace para que pueda empezar en esto, si quieres ir a esa dirección:

http://code.google.com/apis/spreadsheets/overview.html

1

Voy a ser más firme que otras han sido: hacer no uso del lado del servidor Excel . Está destinado a ser utilizado como una aplicación de escritorio, lo que significa que no está destinado a ser utilizado desde diferentes hilos aleatorios, posiblemente múltiples hilos a la vez. Es mejor escribir su propia hoja de cálculo que tratar de usar Excel (o cualquier otro producto de escritorio de Office) desde un servidor.

Esta es una de las razones por las que existe Excel Services.Una búsqueda rápida en MSDN apareció en este enlace: http://blogs.msdn.com/excel/archive/category/11361.aspx. Esa es una lista de categorías, por lo que contiene una lista de publicaciones de blogs sobre el tema. Vea también Microsoft.Office.Excel.Server.WebServices Namespace.

+1

Excelente punto sobre los servicios de Excel. Lástima que necesite Sharepoint ... – Randolpho

Cuestiones relacionadas