无法从 HTA 中嵌入的 JScript 打开 Excel
Can't open Excel from JScript embed inside an HTA
跟随 this question, I'm trying to convert the VBScript code on this page 到 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 sheet。正如预期的那样。但是,如果我将 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。如果您能帮助我了解问题所在以及如何解决,我将不胜感激。提前感谢您的支持。
为什么 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 suggests 。
<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>
唯一真正的区别是在 <input>
元素上包含 onclick
事件处理程序。
onclick="return button1_onclick();"
它显示一个按钮,单击该按钮将打开带有新工作簿的 Microsoft Excel。
有用的链接
- Javascript in HTA File
- Open programs from HTA application
- HTA 中的 ActiveX 事件处理程序使用 Javascript
(这个被称为 Javascript 的事实只是显示了关于 JScript 的错误信息).
- MSDN (Scripting Clinic) - Scripting Events
跟随 this question, I'm trying to convert the VBScript code on this page 到 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 sheet。正如预期的那样。但是,如果我将 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。如果您能帮助我了解问题所在以及如何解决,我将不胜感激。提前感谢您的支持。
为什么 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 suggests
<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>
唯一真正的区别是在 <input>
元素上包含 onclick
事件处理程序。
onclick="return button1_onclick();"
它显示一个按钮,单击该按钮将打开带有新工作簿的 Microsoft Excel。
有用的链接
- Javascript in HTA File
- Open programs from HTA application
- HTA 中的 ActiveX 事件处理程序使用 Javascript (这个被称为 Javascript 的事实只是显示了关于 JScript 的错误信息).
- MSDN (Scripting Clinic) - Scripting Events