Windows 7小工具不释放ActiveX对象

我正在开发一个需要从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块中,我可以validation它是否成功。 所有的删除和空分配是我试图释放对COM对象的任何引用,但我似乎缺less的东西。 有什么办法可以强制Excel进程卸载?

这就是Internet Explorer / JScript的工作原理 – 引用会持续一段时间,直到垃圾收集器运行。 如果将该variables设置为null ,则引用应该在一段时间后被垃圾收集。 您也可以使用可用于JScript和IE的(相对未logging的) CollectGarbage()方法来强制收集它:

 var Excel = new ActiveXObject("Excel.Application"); //... blah ... Excel.Quit(); Excel = null; window.setTimeout(CollectGarbage, 10); 

请注意,在调用CollectGarbage() )之前,您需要留出less量时间(这里是10ms CollectGarbage() ,否则当您调用函数时,该variables可能尚未标记为收集。

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

我目前的机器上没有安装Microsoft Office,但我相信你必须将Excel.Quit()更改为Excel.Application.Quit()

这是因为Excel初始化为ActiveX对象,特别是Excel.Application ,而不是Excel本身。