ActiveXObject - Excel.Application не освобождает ресурсы
Я разработал этот скрипт, где я пишу на листе 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 ответ
ActiveX может иметь странное поведение. Вы должны убедиться, что вы установили все ссылки на объект ActiveX (и подобъекты / члены) на NULL. В вашем коде вы установили w = null, но у вас все еще есть ссылки на objWorksheet1, name, objWorksheet2, фамилию. Установите те к нулю также. Я бы порекомендовал блок try/catch/finally, где вы обнулите их в блоке finally.
Есть хорошая статья о CodeProject, которая рекомендует: Сохранить, Закрыть, Выйти, NULL. Тем не менее, это не будет иметь значения, если вы не удалите все ссылки на объекты ActiveX и их элементы.
В разделах 12 и 13 этой статьи есть несколько хороших примеров: http://www.codeproject.com/Articles/404688/Word-Excel-ActiveX-Controls-in-ASP-NET