如何在Javascript中连接Excel事件

use*_*564 7 html javascript excel activex

在客户端Web应用程序中,我想:

  1. 打开Excel电子表格,
  2. 将一些应用程序数据导出到Excel,
  3. 允许用户使用它,和
  4. 完成后,将(可能已更改的)数据读回我的应用程序.

我希望用户能够获得流畅的体验,并通过连接到BeforeClose事件来检测他们何时完成excel,但我发现我无法在javascript/HTML中连接到Excel的事件.

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;
}
Run Code Online (Sandbox Code Playgroud)

有没有人有什么建议?

Ant*_*ton -1

我不相信这是可能的。原因是,当您调用以下代码时:

var excel = new ActiveXObject("Excel.Application");
Run Code Online (Sandbox Code Playgroud)

您实际上正在打开 Excel。因此,使用以下行:

workbook.BeforeClose = BeforeCloseEventHandler;
Run Code Online (Sandbox Code Playgroud)

这就像您告诉 Excel 应用程序运行 Javascript,这是不可能的。我尝试过研究替代方案,例如创建一个事件对象,定义其背后的代码,然后将其分配给 workbook.BeforeClose,但我会遇到同样的问题:JavaScript 无法检测到 Excel 事件。主要是因为它作为单独的进程运行。

因此,您可以考虑以下其他选择:

  1. 将 Excel 数据保存在用户的计算机上,然后当用户丢失 Excel 时,让他们单击调用第一个方法的某个位置,该方法会读取该文件并显示它。
  2. 从excel文件中读取数据,然后显示。
  3. 不要关闭您的 Excel 对象(这可能会使 Excel 作为计算机上的一个进程保持打开状态),并在 JavaScript 中有一个计时器事件。每隔 5 秒检查 Excel 是否仍然打开,如果未打开,则读取文件并显示。

抱歉,我无法再提供帮助,而且我不太确定这些替代方案是否有效,但祝你好运!