【问题标题】:Closing Excel ActiveX object from JavaScript leaves excel.exe in memory从 JavaScript 中关闭 Excel ActiveX 对象会将 excel.exe 留在内存中
【发布时间】:2013-06-25 23:29:34
【问题描述】:
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,以防万一。抱歉,我只是想确保它有效。我什至现在已经拿走了一个,以防万一发生冲突,但 nada。有什么帮助吗?

【问题讨论】:

标签: javascript html excel activex


【解决方案1】:

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

【讨论】:

  • 为什么? MSDN states excel.Quit 应该足以退出 excel。我不是说你错了,我只是想知道为什么这会有所作为。
  • 成功了!谢谢!有人需要在答案上加 1!它不会让我。
  • @user1739280,如果这个答案解决了你的问题,你应该mark it as the accepted answer
【解决方案2】:

根据微软的说法,由于您在调用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2020-07-07
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2011-07-04
    • 2014-05-07
    相关资源
    最近更新 更多