Excel ei sammu Lopeta-menetelmän kutsumisen jälkeen, kun se automatisoiDaan JScriptistä
Artikkeli
Koskee seuraavia::
Microsoft Excel
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><INPUTtype="button"value="Automate Excel"name=AutomateExcelonclick="StartExcel()"><SCRIPTLANGUAGE=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
Käynnistä Muistio ja liitä seuraava koodi editoriin:
HTML
<HTML><BODY><INPUTtype="button"value="Automate Excel"name=AutomateExcelonclick="StartExcel()"><SCRIPTLANGUAGE=Javascript>function StartExcel() {
var oExcel;
oExcel = new ActiveXObject("Excel.Application");
oExcel.Quit();
oExcel = null;
}
</SCRIPT></BODY></HTML>
Tallenna tiedosto JScriptTest.HTM ja sulje Muistio.
Lataa tiedosto Internet Exploreriin kaksoisnapsauttamalla JScriptTest.HTM tiedostoa.
Käynnistä Windows Task Manager.
Napsauta Internet Explorerin verkkosivun Automatisoi Excel -painiketta. Tutki Windows tehtävienhallintaa ja huomaa, että Excel käynnistyy ja pysyy muistissa.
Siirry toiselle sivulle tai sulje Internet Explorer. Huomaa, että Excel sulkeutuu eikä enää näy Windows Task Managerissa.
In diesem Modul werden Entwickler darin geschult, allgemeine Techniken zur Automatisierung von Geschäftsprozessflows mit Client-Skripts anzuwenden. Darüber hinaus wird der Kontext erläutert, in dem diese Szenarien angewendet werden können.