Auf Englisch lesen

Teilen über


Excel wird nach dem Aufrufen der Quit-Methode beim Automatisieren von JScript nicht heruntergefahren.

Symptome

Beim Automatisieren von Microsoft Excel aus Microsoft JScript bleibt Excel nach dem Aufrufen der Quit-Methode im Arbeitsspeicher, bis Sie internet Explorer schließen oder zu einer anderen Seite navigieren.

Ursache

JScript hält an einem Verweis auf Excel fest. Da es einen Verweis auf Excel gibt, wenn Sie den Befehl "Beenden" ausgeben, wird Excel nicht heruntergefahren. JScript ist eine Garbage Collection-Sprache, was bedeutet, dass die Engine an einem bestimmten Punkt nach sich selbst bereinigt wird und nicht, wenn Sie die Variablen auf NULL festlegen. Wenn Sie internet Explorer herunterfahren oder zu einer anderen Seite wechseln, wird die Engine zerstört. Dieses Verhalten erzwingt die Garbage Collection und gibt den Verweis auf Excel frei.

Lösung

Um dieses Problem zu umgehen, können Sie die CollectGarbage-Methode aufrufen. Dadurch wird erzwungen, dass die Garbage Collection von JScript sofort erfolgt, wodurch der Verweis auf Excel freigegeben wird. Der folgende Codeausschnitt veranschaulicht die Verwendung der CollectGarbage-Methode:

HTML
<HTML> 
<BODY> 
<INPUT type="button" value="Automate Excel" name=AutomateExcel onclick="StartExcel()"> 
<SCRIPT LANGUAGE=Javascript> 
  var idTmr = "";

function StartExcel() { 
    var oExcel; 

oExcel = new ActiveXObject("Excel.Application"); 
    oExcel.Quit(); 
    oExcel = null;
    idTmr = window.setInterval("Cleanup();",1);
  } 

function Cleanup() {
    window.clearInterval(idTmr);
    CollectGarbage();
  }

</SCRIPT> 
</BODY> 
</HTML> 

Beachten Sie, dass die CollectGarbage-Methode nicht direkt nach der Quit-Methode von Excel aufgerufen wird. Sie müssen JScript eine kurze Zeit einräumen, bevor Sie CollectGarbage aufrufen. In diesem Beispiel wird ein Timer verwendet, um zu zeigen, wie sie kurz warten, bevor die Garbage Collection erzwungen wird.

Eine weitere Problemumgehung besteht darin, VBScript für die Automatisierung von Microsoft Excel zu verwenden. Im Gegensatz zu JScript ist VBScript keine Garbage Collection-Sprache. Daher werden Verweise freigegeben, wenn Sie die Variablen auf Nothing festlegen. Bei Verwendung von VBScript wird Excel unmittelbar nach dem Aufrufen der Quit-Methode und der Freigabe der Variablen heruntergefahren. Weitere Informationen finden Sie im Abschnitt Verweise .

Hinweis

Die nicht dokumentierte CollectGarbage-Methode ist nicht Teil der ECMA-262-Spezifikation und ist in zukünftigen Versionen der Skript-Engine möglicherweise nicht verfügbar. Wenn Sie erzwingen, dass der Garbage Collector ausgeführt wird, indem Sie CollectGarbage aufrufen, kann sich dies auch negativ auf die Leistung auswirken.

Status

Microsoft hat bestätigt, dass dies ein Fehler in den Microsoft-Produkten ist, die am Anfang dieses Artikels aufgeführt sind.

Zu reproduzierende Schritte

  1. Starten Sie Editor, und fügen Sie den folgenden Code in den Editor ein:

    HTML
     <HTML> 
     <BODY> 
     <INPUT type="button" value="Automate Excel" name=AutomateExcel onclick="StartExcel()"> 
     <SCRIPT LANGUAGE=Javascript> 
       function StartExcel() { 
         var oExcel; 
    
     oExcel = new ActiveXObject("Excel.Application"); 
         oExcel.Quit(); 
         oExcel = null; 
       } 
     </SCRIPT> 
     </BODY> 
     </HTML> 
    
  2. Speichern Sie die Datei als JScriptTest.HTM, und beenden Sie dann Editor.

  3. Doppelklicken Sie auf die JScriptTest.HTM-Datei, um die Datei in internet Explorer zu laden.

  4. Starten Sie den Windows-Task-Manager.

  5. Klicken Sie auf der Webseite in Internet Explorer auf die Schaltfläche Excel automatisieren. Sehen Sie sich den Windows-Task-Manager an, und beachten Sie, dass Excel gestartet wird und im Arbeitsspeicher verbleibt.

  6. Navigieren Sie zu einer anderen Seite, oder beenden Sie internet Explorer. Beachten Sie, dass Excel beendet wird und nicht mehr im Windows-Task-Manager angezeigt wird.

References

Weitere Informationen zu einem VBScript-Codebeispiel, das die Automatisierung in Excel veranschaulicht, finden Sie unter Automatisieren von Excel aus einem clientseitigen VBScript.