DOBON.NET DOBON.NETプログラミング掲示板過去ログ

エクセルファイル保存

環境/言語:[WinXP,VisualBasic.Net]
分類:[ASP.NET]

エクセルファイルの原本(sample.xls)を読み込み、
違う名前でファイルを(sample1.xls)保存をします。
以下のプログラムを作成しましたが、スレッドが残ってしまいます。
何かわかる方がいらっしゃいましたら教えてください。

プログラム
Dim strPath As String = Server.MapPath("sample.xls")
'オブジェクトの作成
Dim XlsobjApp As Object 'Excel.Application
XlsobjApp = CreateObject("Excel.application")
'ワークブックのオープン
XlsobjApp.Workbooks.Open(strPath, , True)
<途中省略>
 'データを入れます 
XlsobjApp.Application.Worksheets(1).Range("A1").Value _
= "DAI:TEST"
<途中省略>
'終了処理(保存しないで終了)
XlsobjApp.DisplayAlerts = False '保存のダイアログを出さない!
'保存
XlsobjApp.Application.Worksheets(1).saveas(Server.MapPath("sample1.xls"))
XlsobjApp.Application.Workbooks.Close()
'XlsobjApp.Application.Workbooks = Nothing メンバがありません。
'XlsobjApp.Close() メンバがありません。
'XlsobjApp.Application.Close() メンバがありません。
'エクセルアプリの終了!
XlsobjApp.Quit()
'オブジェクトの開放
XlsobjApp = Nothing
--------------------
’はエラーでメンバがありませんと出ます。

よろしくお願いします。
2005/08/31(Wed) 14:36:07 編集(投稿者)

■No12545に返信(ABCさんの記事)
> エクセルファイルの原本(sample.xls)を読み込み、
> 違う名前でファイルを(sample1.xls)保存をします。
> 以下のプログラムを作成しましたが、スレッドが残ってしまいます。
> 何かわかる方がいらっしゃいましたら教えてください。

お世話になります。
COMオブジェクトの開放忘れだと思います。

↓花ちゃんさんのページ参照
http://www.bcap.co.jp/hanafusa/dotnet/Excel08.htm

追記:
>'オブジェクトの作成
>Dim XlsobjApp As Object 'Excel.Application
>XlsobjApp = CreateObject("Excel.application")

レイトバインディングにしている理由がないなら,
アーリーバインディングにしましょう。
> レイトバインディングにしている理由がないなら,
> アーリーバインディングにしましょう。

念のため補足します。

.NET では、「アーリーバインドにするだけ」では、COM 参照の解放漏れを直接的に避けることはできません。

オブジェクト参照が失われても、GC によってオブジェクトのクリーンアップが実行されるまでは、そのオブジェクトが保持する COM 参照は残っているためです。

DOBON.NET | プログラミング道 | プログラミング掲示板