javascript - Windows 7 小工具不释放 ActiveX 对象

标签 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;

这一切都包含在一个 try-catch block 中,我可以验证它是否全部成功。所有的删除和空赋值都是我试图释放对 COM 对象的任何引用,但我似乎遗漏了一些东西。有什么方法可以强制卸载 Excel 进程吗?

最佳答案

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

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

//... blah ...

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

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

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

关于javascript - Windows 7 小工具不释放 ActiveX 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7249465/

相关文章:

javascript - Bootstrap 工具提示看起来很简单

Javascript 委托(delegate)问题

excel - 在 Power Query 中使用文本字符串查找所有代码组合

excel - 用于软件测试的最佳交互式分析和绘图工具是什么?

node.js - 如何在 Node js 中迭代行并打印 excel 中的对象值?

javascript - 从javascript访问word文档?

vb.net - 在 VB .net 2010 中创建 ActiveX 控件 (OCX)

javascript - 使用 javascript 的完整网页截图

Javascript + Chrome,控制台在我检查之前找不到元素

c++ - 使用 FireBreath 的 WMI 和 C++