【问题标题】:Can't open Excel from JScript embed inside an HTA无法从嵌入 HTA 的 JScript 打开 Excel
【发布时间】:2021-03-13 22:36:24
【问题描述】:

this question 之后,我正在尝试将this page 上的VBScript 代码转换为JScript。如果我运行以下.hta 代码:

<HTML>
<BODY>
    <INPUT id=button1 name=button1 type=button value=Button>
    <SCRIPT LANGUAGE="VBScript">
        sub button1_onclick()
            dim app
            set app = createobject("Excel.Application")
            app.Visible = true
            dim wb
            set wb = app.workbooks.add
            end sub
    </SCRIPT>
</BODY>
</HTML>

点击按钮后会打开一个空的 Excel 工作表。正如预期的那样。但是,如果我将 VBScript 部分转换为 JScript

<HTML>
<BODY>
    <INPUT id=button1 name=button1 type=button value=Button>
    <script LANGUAGE="JScript">
        function button1_onclick() {
            // var app = WScript.CreateObject("Excel.Application");
            var app = new ActiveXObject("Excel.Application");
            app.Visible = true;
            var wb = app.Workbooks.Add();
        }
    </script>
</BODY>
</HTML>

单击按钮时根本不会打开 Excel。如果您能帮助我了解问题所在以及如何解决,我将不胜感激。提前感谢您的支持。

【问题讨论】:

  • button1_onclick 函数永远不会运行。您需要在输入元素&lt;input onclick="openExcel();" ...&gt; 上附加一个事件监听器,并将函数名称更改为openExcel,以避免元素ids 与全局变量/函数发生冲突。
  • 是的,我有。如果它仍然不适合您,那可能是因为使用了多种语言。如果您在同一页面上安装了 VBS 和 JS,您可能需要在 onclick 属性中指向正确的语言,例如:&lt;input onclick="javascript: openExcel();" ...&gt;。您在事件处理程序中的实际代码按原样工作。
  • 如果你不能让它工作(检查函数运行的警报),它可能类似于this question,不幸的是我不知道答案。与您的代码类似的代码已经在我的 HTA 应用程序中运行了十年,即使使用最新的 Office Excel。
  • 对我的第二条评论的修正:“如果您在同一页面上有 VBS 和 JS ...”这不仅仅是点击事件的代码,它是任何页面上的 VBS。
  • 此外,注释掉 WScript.CreateObject 的行将永远不会在 HTA 中工作,因为它无法访问 Windows 脚本主机。这是因为 MSHTA 是它自己的主机,支持 Active Scripting 语言。需要注意的是,您仍然可以使用一些可通过 COM 访问的 WScript 库,例如 WScript.Shell 等。

标签: excel com jscript hta


【解决方案1】:

为什么Object_Event 语法不起作用?

其实很简单的Object_Event语法就是VBScript,要让事件在JScript中自动绑定你只需要使用正确的语法Object::Event,这里是一个使用自动绑定事件的例子。

<html>
<body>
    <input id="button1" name="button1" type="button" value="Button">
    <script language="JScript">
        function button1::onclick() {
            var app = new ActiveXObject("Excel.Application");
            app.Visible = true;
            var wb = app.Workbooks.Add();
        }
    </script>
</body>
</html>

刚刚对此进行了测试,它似乎可以正常工作,因此可能只是您缺少onclick 事件处理程序,因为@Teemu 建议in the comments

<html>
<body>
    <input id="button1" name="button1" type="button" value="Button" onclick="return button1_onclick();">
    <script language="JScript">
        function button1_onclick() {
            var app = new ActiveXObject("Excel.Application");
            app.Visible = true;
            var wb = app.Workbooks.Add();
        }
    </script>
</body>
</html>

唯一真正的区别是在&lt;input&gt; 元素上包含onclick 事件处理程序。

onclick="return button1_onclick();"

它会显示一个按钮,单击该按钮会打开带有新工作簿的 Microsoft Excel。


有用的链接

【讨论】:

    猜你喜欢
    • 2015-03-30
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多