Impossible d'ouvrir Excel à partir de l'intégration JScript dans un HTA

Dec 02 2020

Suite à cette question , j'essaye de convertir le code VBScript de cette page en JScript. Si j'exécute le .htacode ci-dessous :

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

Il ouvre une feuille Excel vide en cliquant sur le bouton. comme prévu. Cependant, si je convertis la partie VBScript en 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>

il n'ouvre pas du tout Excel en cliquant sur le bouton. Je vous serais reconnaissant si vous pouviez m'aider à savoir quel est le problème et comment je peux le résoudre. Merci d'avance pour votre soutien.

Réponses

1 user692942 Dec 02 2020 at 16:53

Pourquoi la Object_Eventsyntaxe ne fonctionne-t-elle pas ?

C'est en fait une Object_Eventsyntaxe très simple est VBScript, pour permettre aux événements de se lier automatiquement dans JScript, il vous suffit d'utiliser la syntaxe correcte qui est Object::Event, voici un exemple utilisant des événements liés automatiquement.

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

Je viens de tester cela et cela semble fonctionner, il se peut donc que vous manquiez leonclick gestionnaire d'événements comme le suggère @Teemu dans les commentaires .

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

La seule vraie différence est l'inclusion du onclickgestionnaire d'événements sur l' <input>élément.

onclick="return button1_onclick();"

Il affiche un bouton qui, lorsqu'il est cliqué, ouvre Microsoft Excel avec un nouveau classeur.


Liens utiles

  • Javascript dans le fichier HTA
  • Ouvrir des programmes à partir de l'application HTA
  • Gestionnaires d'événements ActiveX dans un HTA utilisant Javascript (le fait que cela s'appelle Javascript montre juste la désinformation autour de JScript) .
  • MSDN (Scripting Clinic) - Événements de script