我已经开发了这个脚本,我在其中编写了一个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任务管理器中有两个EXCELL对象在运行。在我的函数末尾释放资源似乎不起作用。
我也尝试过objWorksheet1.close(true);、w.Workbooks.Close(true);和w.ActiveWorkbook.Close(true);,但都没有成功。
有没有人知道哪些是开放对象,我怎么才能摆脱它们?
发布于 2013-02-22 23:24:09
ActiveX可能会有一些奇怪的行为。您需要确保将对ActiveX对象(和子对象/成员)的所有引用都设置为null。在您的代码中,您设置了w= null,但仍然引用了objWorksheet1、name、objWorksheet2、surname。也将这些设置为null。我建议使用try/catch/finally块,在这个块中,您可以将finally块中的值设为空。
在CodeProject上有一篇很好的文章推荐:保存、关闭、退出、空。尽管如此,除非您已经将对ActiveX对象及其成员的所有引用都设为空,否则这并不重要。
本文的第12和13节有一些很好的例子:http://www.codeproject.com/Articles/404688/Word-Excel-ActiveX-Controls-in-ASP-NET
https://stackoverflow.com/questions/15026827
复制相似问题