2009-01-12 7 views
7

En una aplicación Web del lado del cliente, me gustaría:¿Cómo puedo conectar a eventos de Excel en Javascript

  1. abrir una hoja de cálculo Excel,
  2. exportación algunos datos de aplicaciones a Excel,
  3. permitir que el usuario trabaje con él, y
  4. cuando hayan terminado, lea los datos (potencialmente modificados) en mi aplicación.

Me gustaría que el usuario tenga una experiencia fluida y detectar cuando se hacen con Excel mediante la conexión al evento BeforeClose, pero me parece que no soy capaz de conectar a los eventos de Excel en JavaScript/HTML.

function BeforeCloseEventHandler(cancel) { 
    // TODO: read values from spreadsheet 
    alert("Closing..."); 
} 

function openExcel() { 
    var excel = new ActiveXObject("Excel.Application"); 
    var workbook = excel.Workbooks.Add(); 
    var worksheet = workbook.Worksheets(1); 
    worksheet.Cells(1, 1).Value = "First Cell"; 
    worksheet.Cells(1, 2).Value = "Second Cell"; 
    workbook.BeforeClose = BeforeCloseEventHandler; // THIS DOESN'T WORK 
    excel.Visible = true; 
    excel.UserControl = true; 
} 

¿Alguien tiene alguna sugerencia?

+0

Al principio pensé que estabas loco ... ahora no puedo esperar la respuesta. –

Respuesta

-1

No creo que esto sea posible. El motivo es que cuando llamas al siguiente código:

En realidad estás abriendo Excel. Así, con la siguiente línea:

workbook.BeforeClose = BeforeCloseEventHandler; 

es como usted está diciendo a la aplicación Excel para ejecutar Javascript, que no es posible. He intentado buscar alternativas, como crear un objeto de evento, definir el código que hay detrás de él y luego asignarlo al libro de trabajo. Antes de cerrar, pero me encontraría con el mismo problema: JavaScript no puede detectar los eventos de Excel. Principalmente porque se ejecuta como un proceso separado.

Así que aquí hay algunas alternativas más usted puede considerar:

  1. Guardar los datos de Excel en el ordenador del usuario, a continuación, cuando el usuario pierde Excel, haga que haga clic en alguna parte que se llamará al primero método, que lee el archivo y lo muestra
  2. Lea los datos del archivo de Excel y luego muéstrelos.
  3. No cierre su objeto Excel (esto probablemente dejará Excel abierto como un proceso en su computadora), y tenga un evento de temporizador en javascript. Cada 5 segundos, compruebe si Excel todavía está abierto, y si no está abierto, lea el archivo y visualícelo.

Lo siento, ya no podría ser más ayuda, y no estoy muy seguro de si alguna de esas alternativas funcionaría, pero ¡buena suerte!

+1

No tengo ni idea acerca de JavaScript, así que no tengo ninguna razón para dudarlo aquí. ¡Y conectar Excel a través de JavaScript seguro que "suena" imposible! Sin embargo, estar fuera de proceso no debería ser un problema. Usando automatización fuera de proceso estándar usando VB6, VB.NET o C#, PUEDE enganchar eventos de Excel. –

+0

Como ejemplo, vea "CÓMO: Manejar eventos para Excel utilizando Visual C# .NET" en http://support.microsoft.com/kb/823981. Pero todavía no tengo ni idea de cómo hacer esto a través de JavaScript, ni tengo idea si se puede hacer ... –

1

Después de investigar un poco, descubrí que no puedo conectar eventos a objetos ActiveX dinámicos (es decir, los creados por el constructor new ActiveXObject) en javascript.

Una idea es que creo un control de usuario de formulario de envoltura de Windows que se alojaría dentro de una etiqueta <object> en la aplicación web. El control de usuario llamaría a Excel y recibiría eventos, y subiría los eventos a javascript, con lo que podría conectarme usando el mecanismo <script for="..." event="...">. No estoy seguro de que esto funcione, pero lo intentaré.

Incluso si funciona, no estoy muy contento con esta solución.Hay demasiadas capas: el javascript se llama desde un control Silverlight, lo que significa que mis datos tienen que cruzar 3 límites hacia y desde allí: Silverlight -> Javascript -> Winform User Control alojado -> Excel.

Sería bueno eliminar algunos de estos límites.

+0

¿Es esta aplicación web una intranet, utilizada por clientes corporativos que se puede garantizar que tiene Excel instalado? De lo contrario, obtendrá un bloqueo en su código, o incluso si maneja los errores correctamente, tendría un gran vacío en la funcionalidad prevista de su página web. –

+0

Utilizando un control de cuadrícula basado en web que podría incrustar, creo que tendría más sentido. Si no necesita permitir que el usuario cree fórmulas que hagan referencia a otras celdas, los controles de cuadrícula son excelentes para la entrada de datos estilo cuadrícula. –

+0

Sí, aplicación web, una intranet utilizada por clientes corporativos que garantiza tener Excel instalado. – user53564

0

Creo que también su segundo enfoque usando un control de Windows From hospedado en IE no funcionará.

IE se comporta de forma diferente como servidor de scripts. Hay ciertas limitaciones como una entrada en el blog de Eric Lippert menciona:

Implementing Event Handling, Part Two

Cuestiones relacionadas