Nie można otworzyć programu Excel z osadzonego języka JScript w aplikacji HTA

Dec 02 2020

Po tym pytaniu próbuję przekonwertować kod VBScript na tej stronie na JScript. Jeśli uruchomię poniższy .htakod:

<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

1 user692942 Dec 02 2020 at 16:53

Dlaczego Object_Eventskładnia nie działa?

W rzeczywistości jest to bardzo prosta Object_Eventskł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 onclickobsł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 onclickobsł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