掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Excelプロセスの後処理 (ID:142017)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VB2005Pro+WindowsXPです。 FAQによくあるExcelのプロセス事後処理なんですが、 いろいろな情報を元に最低限の処理を組んでみました。 #参照設定でExcelを追加しています。 Dim aplExcel As _ New Microsoft.Office.Interop.Excel.Application Dim xlBooks As Microsoft.Office.Interop.Excel.Workbooks Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet aplExcel.Visible = True xlBooks = aplExcel.Workbooks xlBooks.Add() xlSheet = xlBooks(1).Sheets(1) xlSheet.Range("B3").Value = "XXXXX" xlBooks(1).Saved = True aplExcel.Quit() System.Runtime.InteropServices. _ Marshal.ReleaseComObject(xlSheet) System.Runtime.InteropServices. _ Marshal.ReleaseComObject(xlBooks) System.Runtime.InteropServices. _ Marshal.ReleaseComObject(aplExcel) 'GC.Collect() 一応画面上にExcelシートが出てきて消えるという動作はしています。 最大の着目点は実行後にExcelプロセスが残るかどうかです。 上記コードを繰り返し実行しながらタスクマネージャでExcelプロセスの 有無を監視していると、残Excelプロセスの数が7-8個になったあとの 実行でいくつかのExeclプロセスがクリアされるようです。 「7-8個」というのはあまり確定的ではなく、1個目でクリアされるときも あります。また、すべてクリアされる時もあれば1個残るときもあります。 上記コードの最終行のコメントをはずして「GC.Collect()」を必ず実行 すると確実にクリアされています。 そこで質問ですが、 1.上記のComオブジェクトの使用方法は正しいのでしょうか? 2.自動的にガベージコレクションを実行してくれる、という.NETの 仕様を利用(7-8個残るのを容認)していていいのでしょうか? 3.それとも最終行の GC.Collect() を積極的に実行したほうがいい のでしょうか? お願いいたします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.