- PR -

ExcelのWorkbooksとWebBrowserコントロールに関する質問

1
投稿者投稿内容
サンジ
会議室デビュー日: 2008/09/14
投稿数: 12
投稿日時: 2008-09-17 14:08
VB2005とExcel2007で開発しています。

WebBrowerコントロールにExcelを表示させて操作しているのですが、
なぜこのようになるのか、理解できない部分がありまして
質問させて頂きました。

参照の追加で
「Microsoft Office 12.0 Object Library」を追加して
以下のプログラムでExcelを表示しています。


Dim xlApp = New Excel.Application '(1)
Dim xlBooks As Excel.Workbooks = xlApp.Workbooks '(2)
Me.WebBrowser1.Navigate("C:\Sample.xls") '(3)★質問点です★
Dim xlBook As Excel.Workbook = xlBooks.Item("Sample.xls") '(4)


プログラムのコメントで★マークを付けた行が分からないのですが、
どうしてこの行を実行すると、(4)の行が正しく動作するのでしょうか?
xlBooksでOpenしていないのに、問題ないのでしょうか?

具体的には、Excelを一度閉じて、再度Excelを開きたいと思っているのですが、
この部分がどうしても理解できず、先へ進めなくなってしまいました。

繰り返しになりますが、
WebBrowserに表示したいため、(3)の行は必要になると思うのですが、
どうして(3)の行を実行することで、xlBooksに値が入ってくるのでしょうか?

もし宜しければご教示下さい。
ぜひ宜しくお願い致します。
ふるふる
会議室デビュー日: 2008/02/05
投稿数: 19
投稿日時: 2008-09-17 17:29
Webブラウザコントロールは、いうなればプログラムからブラウザを制御するためのコントロールです。

Excelが起動していない状態で、IE上でブックを開くと、Excelのインスタンスが作成されます。
Excelが起動していると、Excelインスタンスはそのままです。タスクマネージャで確認しました。

つまり、Dim xlApp = New Excel.Application で新しいExcelインスタンスが作成され、そのインスタンス上を利用してブラウザがブックを開く。xlAppはExcelインスタンスへの参照だから、ブックが追加されている、ということでしょう。
サンジ
会議室デビュー日: 2008/09/14
投稿数: 12
投稿日時: 2008-09-17 19:18
そういうことなのですね。
とても良く理解できました。
お陰で私が困っていた原因も突き止めることができました。
ご回答ありがとうございます。

もう1つだけ、ご教示お願いできますでしょうか?
上記プログラムで作成したExcelのプロセスを終了したいのです。
以下のようにプログラムしました。
(例外は発生しないものと想定しています。)

  Dim xlApp = New Excel.Application
  Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
  Me.WebBrowser1.Navigate("C:\Sample.xls")
  Dim xlBook As Excel.Workbook = xlBooks.Item("Sample.xls")

  System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
  Me.WebBrowser1.Dispose()
  System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks)
  System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)

こうすると正しくプロセスを解放できたのですが、
WebBrowser1をDisposeしてしまうため、
新しくインスタンスを作成しないと、再表示することができません。
WebBrowser1からExcelのプロセスを解放するにはDisposeするしかないのでしょうか?

もし何か別の方法がございましたら、ご教示頂けませんか?
Navigateに"about:blank"を設定してみても解放されませんでした。
ぜひ宜しくお願い致します。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-09-18 10:10
引用:
WebBrowser1をDisposeしてしまうため、
新しくインスタンスを作成しないと、再表示することができません。
WebBrowser1からExcelのプロセスを解放するにはDisposeするしかないのでしょうか?


素の IE でも Excel ファイル表示したウィンドウを閉じない限り Excel プロセスは死なないみたいですし、そんなもんじゃないっすか?
サンジ
会議室デビュー日: 2008/09/14
投稿数: 12
投稿日時: 2008-09-18 12:16
引用:

素の IE でも Excel ファイル表示したウィンドウを閉じない限り Excel プロセスは死なないみたいですし、そんなもんじゃないっすか?


そうなのですね。
例を挙げて説明して頂き、納得しました。
必要に応じてAddHandlerやプロパティの設定をして対応することにします。

ご解答頂き大変ありがとうございました。

引用のタグを間違えたため、修正

[ メッセージ編集済み 編集者: サンジ 編集日時 2008-09-18 12:17 ]
1

スキルアップ/キャリアアップ(JOB@IT)