[英]Windows 7 Gadget not releasing ActiveX object
我正在開發一個需要從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塊中,我可以驗證它是否都成功。 所有刪除和空分配都是我嘗試釋放對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()
)之前,您需要留出少量時間(此處為10ms CollectGarbage()
,否則當您調用該函數時,該變量可能尚未標記為已收集。
相關支持文章: http : //support.microsoft.com/kb/266088
我當前的計算機上沒有安裝Microsoft Office,但我相信您必須將Excel.Quit()
更改為Excel.Application.Quit()
。
這是因為Excel初始化為ActiveX對象,特別是Excel.Application
,而不是Excel
本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.