Не удается открыть Excel из JScript, встроенного в HTA

Dec 02 2020

Следуя этому вопросу , я пытаюсь преобразовать код 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. Буду признателен, если вы поможете мне узнать, в чем проблема и как я могу ее решить. Заранее благодарим за вашу поддержку.

Ответы

1 user692942 Dec 02 2020 at 16:53

Почему не работает 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 в комментариях .

<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>

Единственное реальное отличие - это включение onclickобработчика событий в <input>элемент.

onclick="return button1_onclick();"

Он отображает кнопку, при нажатии которой открывается Microsoft Excel с новой книгой.


Полезные ссылки

  • Javascript в файле HTA
  • Открытые программы из приложения HTA
  • Обработчики событий ActiveX в HTA с использованием Javascript (тот факт, что это называется Javascript, просто показывает дезинформацию о JScript) .
  • MSDN (Scripting Clinic) - События сценариев