我已经开发了这个脚本,我在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);
但没有运气。
有没有人知道哪些是开放的对象,我怎样才能摆脱它们?
答案 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