ActiveXObject - Excel.Application不释放资源

时间:2013-02-22 14:51:26

标签: excel-vba activex activexobject excellibrary vba

我已经开发了这个脚本,我在xls工作表上写道。

var excelFile = "C:\\TestActiveX\\Test.xls";
function readExcelFileAndUpdateView()
{
    var w =new ActiveXObject("Excel.Application");      
    w.Workbooks.Open(excelFile);  
    var objWorksheet1 = w.Worksheets(1);    
    var name =objWorksheet1.Cells(1,2);
    if(name==null){
        name="";
    }

    var objWorksheet2 = w.Worksheets(2);    
    var surname = objWorksheet2.Cells(1,2);
    if(surname==null){
        surname="";
    }

    var str = "Name is :"+name+"<br/>Surname is :"+surname;

    document.getElementById("txtAreaXLS").innerHTML=str;    
    w.Application.Quit();
    w.Quit();
    w = null;               
}

问题是当这个函数完成执行时,我的Windows任务管理器中运行了2个EXCELL对象。在我的功能结束时释放资源似乎不起作用。

我也尝试了objWorksheet1.close(true);w.Workbooks.Close(true);以及w.ActiveWorkbook.Close(true);但没有运气。

有没有人知道哪些是开放的对象,我怎样才能摆脱它们?

1 个答案:

答案 0 :(得分:1)

ActiveX可能有一些奇怪的行为。您需要确保将对ActiveX对象(和子对象/成员)的所有引用设置为null。在您的代码中,您设置了w = null,但仍然引用了objWorksheet1,name,objWorksheet2,surname。将它们设置为null。我建议使用try / catch / finally块,在finally块中将它们归零。

CodeProject上有一篇很好的文章建议:保存,关闭,退出,null。尽管如此,除非你已经取消了对ActiveX对象的所有引用,否则这无关紧要。其成员。

本文第12节和第13节有一些很好的例子: http://www.codeproject.com/Articles/404688/Word-Excel-ActiveX-Controls-in-ASP-NET