从JavaScript关闭Excel ActiveX对象会将excel.exe保留在内存中

时间:2013-06-25 23:29:35

标签: javascript html excel activex

function gbid(s) {
    return document.getElementById(s);
}

function GetData(cell,row) {
    var excel = new ActiveXObject("Excel.Application");
    var excel_file = excel.Workbooks.Open("Z:/SunCenter/Medicare Customer Experience/Hub/CaliforniaHUB/Plans/H0562_2013_082_EOC.xlsx");
    var excel_sheet = excel.Worksheets("Sheet1");

    gbid('span1').innerText = excel_sheet.Cells(1191,1).Value;  
    gbid('span2').innerText = excel_sheet.Cells(1192,1).Value;  
    gbid('span3').innerText = excel_sheet.Cells(1192,3).Value;  

    excel_file.Close()
    excel.Quit()
}

每当javascript运行(onload)时,它就会在taskmanager / Processes中创建一个进程。问题是它在使用后不会关闭它。当我再次运行时,它会创建另一个。现在它只是从excel文件中提取信息,它工作正常,但它不会关闭任务管理器中的exe文件。我认为excel_file.close会这样做,我甚至会放入另一个excel.quit,以防万一。对不起,我只是想确保它有效。我现在甚至在冲突的情况下拿走了一个,但是虚无...有什么帮助吗?

2 个答案:

答案 0 :(得分:4)

您需要致电excel.Application.Quit();而不是excel.Quit();

答案 1 :(得分:1)

根据Microsoft的说法,因为当您致电Quit()时,您仍然持有对Excel的引用,Excel无法完全关闭。建议拨打Quit(),设置excel = null,然后在短暂的等待后运行CollectGarbage

var idTmr = "";

function GetData() { 
    //...

    excel.Quit(); 
    excel = null;
    idTmr = window.setInterval("Cleanup();",1);
}

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

原始资料来源:

http://support.microsoft.com/kb/266088

Windows 7 Gadget not releasing ActiveX object