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