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

Другие вопросы по тегам