Nie można otworzyć programu Excel z osadzonego języka JScript w aplikacji HTA
Po tym pytaniu próbuję przekonwertować kod VBScript na tej stronie na JScript. Jeśli uruchomię poniższy .hta
kod:
<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>
Po kliknięciu przycisku otwiera pusty arkusz Excela. zgodnie z oczekiwaniami. Jeśli jednak przekonwertuję część VBScript na 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>
w ogóle nie otwiera programu Excel po kliknięciu przycisku. Byłbym wdzięczny, gdybyś pomógł mi dowiedzieć się, na czym polega problem i jak mogę go rozwiązać. Z góry dziękuję za wsparcie.
Odpowiedzi
Dlaczego Object_Event
składnia nie działa?
W rzeczywistości jest to bardzo prosta Object_Event
składnia to VBScript, aby umożliwić automatyczne wiązanie zdarzeń w języku JScript, wystarczy użyć poprawnej składni, czyli Object::Event
, oto przykład użycia automatycznie powiązanych zdarzeń.
<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>
Właśnie to przetestowałem i wydaje się, że działa, więc może po prostu brakuje Ci modułu onclick
obsługi zdarzeń, jak sugeruje @Teemu w komentarzach .
<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>
Jedyną prawdziwą różnicą jest włączenie onclick
obsługi zdarzenia do <input>
elementu.
onclick="return button1_onclick();"
Wyświetla przycisk, który po kliknięciu otwiera program Microsoft Excel z nowym skoroszytem.
Przydatne linki
- JavaScript w pliku HTA
- Otwieraj programy z aplikacji HTA
- Procedury obsługi zdarzeń ActiveX w aplikacji HTA używającej JavaScript (fakt, że nazywa się to Javascript, po prostu pokazuje błędne informacje dotyczące języka JScript) .
- MSDN (Scripting Clinic) - Wydarzenia związane ze skryptami