2011-08-30 5 views
6

Excel 문서에서 데이터를 가져와야하는 Windows 7 가젯에서 작업하고 있습니다. 문제는, 필요한 데이터를 검색 한 후에 Excel 프로세스가 언로드되지 않는다는 것입니다.Windows 7 가젯이 ActiveX 개체를 공개하지 않음

여기 내 초기화 함수에서 사용하는 코드입니다 :

var Excel = new ActiveXObject("Excel.Application"); 
    Excel.Visible = false; 
    Excel.DisplayAlerts = false; 
    var workbooks = Excel.Workbooks; 
    var workbook = workbooks.Open("\\\\SERVER\\Documents\\Sample.xlsx", 0, true); 
    var activesheet = workbook.ActiveSheet; 
    var cell = sheet.Cells(1, 1); 
    var value = cell.Value; 
    document.getElementById("content").innerHTML = value; 
    delete value; 
    value = null; 
    delete cell; 
    cell = null; 
    delete activesheet; 
    activesheet = null; 
    delete workbook; 
    workbook = null; 
    delete workbooks; 
    workbooks = null; 
    Excel.Quit(); 
    delete Excel; 
    Excel = null; 

모든 시도-catch 블록에 싸여와 나는 모든 성공 중인지 확인 할 수 있습니다. 모든 삭제 및 null 할당 COM 개체에 대한 참조를 해제하려는 내 시도가 있지만 뭔가 누락 된 것 같습니다. Excel 프로세스를 강제로 언로드 할 수있는 방법이 있습니까?

답변

6

이것은 가비지 수집기가 실행될 때까지 Internet Explorer/JScript가 — 참조가 일정 기간 동안 유지되는 방식입니다. 변수 null을 설정하면 참조 이 잠시 후 가비지 수집되어야합니다. 당신은 또한 JScript의와 IE에 사용할 수있는 (상대적으로 문서화되지 않은) CollectGarbage() 방법을 사용하여 수집 할 강제 할 수 있습니다 : 당신은 (여기 10ms의) CollectGarbage()를 호출하기 전에 시간의 작은 금액을 떠날 필요가

var Excel = new ActiveXObject("Excel.Application"); 

//... blah ... 

Excel.Quit(); 
Excel = null; 
window.setTimeout(CollectGarbage, 10); 

주, 그렇지 않으면 함수를 호출 할 때 변수가 아직 콜렉션을 위해 표시되지 않았을 수 있습니다.

관련 지원 문서 : 나는 바탕 화면 가젯에서 지금이 테스트는 프로세스 목록에서 프로세스를 제거하지 확인할 수 http://support.microsoft.com/kb/266088

+0

참고. –

+0

대단히 죄송합니다. 테스트를 위해 잠시 시간이 걸렸지 만 지금은 예상대로 작동합니다. – Eclipse

+0

@Eclipse : 전혀 문제 없음 :-) –

0

현재 컴퓨터에 Microsoft Office가 설치되어 있지 않지만 Excel.Quit()Excel.Application.Quit()으로 변경해야한다고 생각합니다.

Excel이 ActiveX 개체, 특히 Excel.Application으로 초기화되고 Excel이 아닌 것으로 인해이 때문입니다.

관련 문제