Windows 7小工具不释放ActiveX对象

Ecl*_*pse 6 javascript excel activex windows-desktop-gadgets

我正在开发一个需要从excel文档中提取数据的Windows 7小工具.问题是,在我检索到我需要的数据后,Excel进程是不会卸载的.

这是我在初始化函数中使用的代码:

    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;
Run Code Online (Sandbox Code Playgroud)

这都包含在try-catch块中,我可以验证它是否都成功.所有删除和空分配都是我试图释放对COM对象的任何引用,但我似乎缺少了一些东西.有什么办法可以强制Excel进程卸载吗?

And*_*y E 6

这就是Internet Explorer/JScript的工作原理 - 引用会持续一段时间,直到垃圾收集器运行.如果将变量设置为,则应在一段时间后对引用进行垃圾回收null.您还可以使用CollectGarbage()JScript和IE可用的(相对未记录的)方法强制收集它:

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

//... blah ...

Excel.Quit();
Excel = null;
window.setTimeout(CollectGarbage, 10);
Run Code Online (Sandbox Code Playgroud)

请注意,在调用之前需要留出少量时间(此处为10ms)CollectGarbage(),否则当您调用该函数时,该变量可能尚未标记为已收集.

相关支持文章:http://support.microsoft.com/kb/266088