電子書籍の厳選無料作品が豊富!

vb.net2005でexcelを保存ではなく表示する方法。(プロセスを解放することを考慮)

現在、下記URLのような感じでvb.net2005でExcel出力を行なおうとしています。
http://hanatyan.sakura.ne.jp/dotnet/Excel01.htm

このURLでは保存しているので問題ないのですが、
今回、保存はせずに画面に表示したいと考えております。

URLのコードのxlBook.Close(False)を消せばよいのでしょうが、
そうするとExcelのプロセスがPCの電源を落とすまで残ってしまいます。
http://homepage1.nifty.com/rucio/main/technique/ …

表示のみしたい場合はどのような記述をすればよいのでしょうか?

A 回答 (2件)

この質問は全体的に良くわからない。

何がしたいのか。
VB.NETでエクセルを起動し、それで既存ブックを指定して開き、画面に見える(表示する)ようにしたいのか。
その起動したエクセルとブックは誰が閉じるのか(操作者?プログラムから?)
その点をはっきりさせること。
 変数の解法とブックのクローズとエクセルの終了はどういうコードにしているのか。
http://hanatyan.sakura.ne.jp/dotnet/Excel01.htm
のどの辺りに関する質問か。
>終了処理
>テスト中は、下記コードを 上記 Excel 終了後に実施するようにして下さい
をやってなにか不都合を感じたのか。
    • good
    • 0

URLのコードのxlBook.Close(False)を消せばよいのでしょうが、


そうするとExcelのプロセスがPCの電源を落とすまで残ってしまいます。
http://homepage1.nifty.com/rucio/main/technique/ …

参考URLは
MRComObject
というのを多用していますよね?これはCOMの開放を行っております。


ExcelはVB.NET(2002~2010)で操作する場合、
・Excelの利用するオブジェクトをこまめに変数に取得
・不要となった変数は、開放
という処理をしないとプロセスが残ります。
COMの管理はVB側で行ってくれないので、独自に記載する必要があります。


それと正確には思い出せませんが、Excelの特定機能を利用すると、プロセスが残ります。
オートフィル機能を利用した時だったかな?(記憶薄いです)
普通に
・セルの文字列/背景デコレーション
・罫線
とかのレベルであれば、こまめに変数に取得、そして開放でプロセスを残さないで行うことが出来ます。

仮にセルにアクセスする場合、そのセルを変数に納めるために
・Application
・Workbooks
・Workbook
・Worksheets
・Worksheet
・Cells
・Cell
の各オブジェクトの変数を用意する必要があります。

これを省略してしまうとゴーストとなったオブジェクトが発生します。
そのゴーストは変数にも格納されていないので、開放されること無くさまよい続け、プロセスが残ります。

「省略されたコードに美徳」を覚える者もいますが、COMを利用する場合はそれはバグの原因でしかありません。

コードを読み返し、どこかに潜んでいるゴーストを退治しましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!