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 オブジェクト (およびサブオブジェクト/メンバー) へのすべての参照を null に設定する必要があります。コードでは、w = null を設定していますが、objWorksheet1、name、objWorksheet2、surname への参照がまだあります。それらもnullに設定します。finally ブロック内のブロックを null にする try/catch/finally ブロックをお勧めします。

CodeProject には、保存、閉じる、終了、null を推奨する優れた記事があります。それでも、ActiveX オブジェクトとそのメンバーへのすべての参照を null にしない限り、問題にはなりません。

この記事のセクション 12 と 13 にいくつかの良い例があります: http://www.codeproject.com/Articles/404688/Word-Excel-ActiveX-Controls-in-ASP-NET

于 2013-02-22T15:24:08.943 に答える