簡體   English   中英

Windows 7小工具不釋放ActiveX對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM