Não é possível abrir o Excel a partir de JScript incorporado em um HTA

Dec 02 2020

Seguindo esta pergunta , estou tentando converter o código VBScript desta página para JScript. Se eu executar o .htacódigo abaixo :

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

Ele abre uma planilha de Excel vazia ao clicar no botão. como esperado. No entanto, se eu converter a parte VBScript para 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>

ele não abre o Excel ao clicar no botão. Eu agradeceria se você pudesse me ajudar a saber qual é o problema e como posso resolvê-lo. Obrigado pelo seu apoio antecipadamente.

Respostas

1 user692942 Dec 02 2020 at 16:53

Por que a Object_Eventsintaxe não funciona?

Na verdade, a Object_Eventsintaxe muito simples é o VBScript, para permitir que os eventos sejam vinculados automaticamente ao JScript, você só precisa usar a sintaxe correta, ou seja Object::Event, aqui está um exemplo de uso de eventos vinculados automaticamente.

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

Acabei de testar isso e parece estar funcionando, então pode ser que você não tenha o onclickmanipulador de eventos como @Teemu sugere nos comentários .

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

A única diferença real é a inclusão do onclickmanipulador de eventos no <input>elemento.

onclick="return button1_onclick();"

Ele exibe um botão que, quando clicado, abre o Microsoft Excel com uma nova pasta de trabalho.


Links Úteis

  • Javascript no arquivo HTA
  • Abra programas do aplicativo HTA
  • Manipuladores de eventos ActiveX em um HTA usando Javascript (o fato de ser chamado de Javascript apenas mostra a desinformação em torno do JScript) .
  • MSDN (Scripting Clinic) - Eventos de Scripting