Lue englanniksi

Jaa


Excel ei sammu Lopeta-menetelmän kutsumisen jälkeen, kun se automatisoiDaan JScriptistä

Oireet

Kun automatisoit Microsoft Excelin Microsoft JScriptistä, Excel pysyy muistissa Lopetta-menetelmän kutsumisen jälkeen, kunnes suljet Internet Explorerin tai siirryt toiselle sivulle.

Syy

JScript pitää kiinni viittauksesta Exceliin. Koska Excelissä on viittaus, kun suoritat Lopeta-komennon, Excel ei sammu. JScript on roskienkeräyskieli, mikä tarkoittaa, että moduuli siivoaa itsensä jälkeen tietyssä vaiheessa eikä silloin, kun määrität muuttujien arvoksi NULL. Kun suljet Internet Explorerin tai siirryt toiselle sivulle, moduuli tuhoutuu. Tämä toiminta pakottaa roskakorin keräämisen ja vapauttaa viittauksen Exceliin.

Ratkaisu

Voit kiertää tämän ongelman kutsulla CollectGarbage-menetelmää. Tämä pakottaa JScriptin roskakorin keräämisen välittömästi, mikä vapauttaa viittauksen Exceliin. Seuraava koodikatkelma havainnollistaa, miten CollectGarbage-menetelmää käytetään:

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> 

Huomaa, että CollectGarbage-menetelmää ei kutsuta heti Excelin Quit-menetelmän jälkeen. JScriptille on annettava vähän aikaa ennen CollectGarbage-kutsun soittamista. Tässä esimerkissä käytetään ajastinta, joka näyttää, miten odottaa hetken ennen roskien keräämisen pakottamista.

Toinen vaihtoehtoinen menetelmä on käyttää VBScript for Microsoft Excelin automaatiota. Toisin kuin JScript, VBScript ei ole muistinkeräyskieli. Siksi viittaukset julkaistaan, kun määrität muuttujien arvoksi Ei mitään. VBScriptin avulla Excel sulkeutuu heti Lopetta-menetelmän kutsumisen jälkeen ja muuttujien vapauttamisen jälkeen. Lisätietoja on Viittauksia-osassa .

Huomautus

Paperiton CollectGarbage-menetelmä ei ole osa ECMA-262-määritystä, eikä se ehkä ole käytettävissä komentosarjamoduulin tulevissa versioissa. Kun pakotat roskakeräimen suoritettavaksi kutsumalla CollectGarbagea, tämä voi myös heikentää suorituskykyä.

Tila

Microsoft on vahvistanut, että kyseessä on microsoft-tuotteiden ohjelmavirhe, joka on lueteltu tämän artikkelin alussa.

Toistamiseen suoritettavat vaiheet

  1. Käynnistä Muistio ja liitä seuraava koodi editoriin:

    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. Tallenna tiedosto JScriptTest.HTM ja sulje Muistio.

  3. Lataa tiedosto Internet Exploreriin kaksoisnapsauttamalla JScriptTest.HTM tiedostoa.

  4. Käynnistä Windows Task Manager.

  5. Napsauta Internet Explorerin verkkosivun Automatisoi Excel -painiketta. Tutki Windows tehtävienhallintaa ja huomaa, että Excel käynnistyy ja pysyy muistissa.

  6. Siirry toiselle sivulle tai sulje Internet Explorer. Huomaa, että Excel sulkeutuu eikä enää näy Windows Task Managerissa.

Lisätietoja

Jos haluat lisätietoja VBScript-koodiesimerkistä, joka esittelee automaatiota Exceliin, katso Excelin automatisointi asiakaspuolen VBScriptistä.