Microsoft JScript에서 Microsoft Excel을 자동화할 때 Excel은 인터넷 Explorer 닫거나 다른 페이지로 이동할 때까지 Quit 메서드를 호출한 후 메모리에 유지됩니다.
원인
JScript는 Excel에 대한 참조를 계속 유지합니다. Quit 명령을 실행할 때 Excel에 참조가 있으므로 Excel이 종료되지 않습니다. JScript는 가비지 수집 언어입니다. 즉, 변수를 NULL로 설정할 때가 아니라 특정 지점에서 엔진이 자체 정리됩니다. 인터넷 Explorer 종료하거나 다른 페이지로 이동하면 엔진이 제거됩니다. 이 동작은 가비지 수집을 강제하고 Excel에 대한 참조를 해제합니다.
해결 방법
이 문제를 해결하려면 CollectGarbage 메서드를 호출할 수 있습니다. 이렇게 하면 JScript의 가비지 수집이 즉시 수행되어 Excel에 대한 참조가 해제됩니다. 다음 코드 조각은 CollectGarbage 메서드를 사용하는 방법을 보여 줍니다.
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>
CollectGarbage 메서드는 Excel의 Quit 메서드 바로 다음에 호출되지 않습니다. CollectGarbage를 호출하기 전에 JScript에 약간의 시간을 제공해야 합니다. 이 예제에서는 가비지 수집을 강제하기 전에 잠시 기다리는 방법을 보여 주는 타이머가 사용됩니다.
또 다른 해결 방법은 Microsoft Excel의 자동화에 VBScript를 사용하는 것입니다. JScript와 달리 VBScript는 가비지 수집 언어가 아닙니다. 따라서 변수를 Nothing으로 설정하면 참조가 해제됩니다. VBScript를 사용하면 Quit 메서드를 호출하고 변수를 해제한 직후 Excel이 종료됩니다. 자세한 내용은 참조 섹션을 참조 하세요 .
참고
문서화되지 않은 CollectGarbage 메서드는 ECMA-262 사양의 일부가 아니며 이후 버전의 스크립팅 엔진에서는 사용할 수 없습니다. CollectGarbage를 호출하여 가비지 수집기를 강제로 실행하면 성능에도 부정적인 영향을 미칠 수 있습니다.
상태
Microsoft는 이 문서의 시작 부분에 나열된 Microsoft 제품의 버그임을 확인했습니다.
재현 단계
메모장을 시작하고 편집기에서 다음 코드를 붙여넣습니다.
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>
파일을 JScriptTest.HTM 저장한 다음 메모장을 종료합니다.
JScriptTest.HTM 파일을 두 번 클릭하여 인터넷 Explorer 파일을 로드합니다.
Windows 작업 관리자를 시작합니다.
인터넷 Explorer 웹 페이지에서 Excel 자동화 단추를 클릭합니다. Windows 작업 관리자를 검사하고 Excel이 시작되고 메모리에 유지됩니다.
다른 페이지로 이동하거나 인터넷 Explorer 종료합니다. Excel이 종료되고 Windows 작업 관리자에 더 이상 표시되지 않습니다.
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.