1

我开发了这个脚本,我写在 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);

有谁知道哪些是开放的对象,我该如何摆脱它们?

4

1 回答 1

2

ActiveX 可能有一些奇怪的行为。您需要确保将对 ActiveX 对象(和子对象/成员)的所有引用设置为空。在您的代码中,您设置了 w = null,但您仍然有对 objWorksheet1、name、objWorksheet2、surname 的引用。也将它们设置为空。我会推荐一个 try/catch/finally 块,你可以在 finally 块中为空。

CodeProject上有一篇不错的文章推荐:Save、Close、Quit、null。尽管如此,除非您将所有对 ActiveX 对象及其成员的引用都归零,否则这无关紧要。

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

于 2013-02-22T15:24:08.943 回答