掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Excelプロセスの後処理 (ID:142018)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 1.上記のComオブジェクトの使用方法は正しいのでしょうか? 正しくありません。たとえば、以下のような問題があります。 > xlBooks.Add() ここでは、戻り値を変数に保持する必要があります。これは、戻り値となる COM オブジェクトを、後で ReleaseComObject するために必要です。 > xlSheet = xlBooks(1).Sheets(1) この場合には、 book1 = xlBooks(1) sheets = book1.Sheets sheet1 = DirectCast(sheets(1), Excel.Worksheet) のように、途中にある COM オブジェクトも取得しておかないと、 後から ReleaseComObject できません。 さらに言えば、先の Workbooks.Add の時点で、book1 のインスタンスを 得る事ができるはずなので、この場合、xlBooks(1) を取得しなおす必要は無いはずです。 > xlSheet.Range("B3").Value = "XXXXX" これもNG。この場合には rng = xlSheet.Range("B3") rng.Value = "XXXXX" として、後からこの rng As Excel.Range を ReleaseComObject しましょう。 > xlBooks(1).Saved = True 先に取得した変数を用いて、 book1.Saved = True のようにします。 > 2.自動的にガベージコレクションを実行してくれる、という.NETの > 仕様を利用(7-8個残るのを容認)していていいのでしょうか? それは保険的なものですから、容認せず、きちんと自分で後始末をつけた方が良いでしょう。 > 3.それとも最終行の GC.Collect() を積極的に実行したほうがいい > のでしょうか? ガベージコレクトは、通常は .NET 任せで構わないと思います。 ジェネレーション管理など、その仕組みをきちんと理解した上で呼ぶ分には構いませんが、 呼び出すべきではないタイミングで、無計画に呼び出すというのは止めておいた方が無難かと。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.