- - PR -
ExcelのWorkbooksとWebBrowserコントロールに関する質問
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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-09-17 17:29
Webブラウザコントロールは、いうなればプログラムからブラウザを制御するためのコントロールです。
Excelが起動していない状態で、IE上でブックを開くと、Excelのインスタンスが作成されます。 Excelが起動していると、Excelインスタンスはそのままです。タスクマネージャで確認しました。 つまり、Dim xlApp = New Excel.Application で新しいExcelインスタンスが作成され、そのインスタンス上を利用してブラウザがブックを開く。xlAppはExcelインスタンスへの参照だから、ブックが追加されている、ということでしょう。 | ||||
|
投稿日時: 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"を設定してみても解放されませんでした。 ぜひ宜しくお願い致します。 | ||||
|
投稿日時: 2008-09-18 10:10
素の IE でも Excel ファイル表示したウィンドウを閉じない限り Excel プロセスは死なないみたいですし、そんなもんじゃないっすか? | ||||
|
投稿日時: 2008-09-18 12:16
そうなのですね。 例を挙げて説明して頂き、納得しました。 必要に応じてAddHandlerやプロパティの設定をして対応することにします。 ご解答頂き大変ありがとうございました。 引用のタグを間違えたため、修正 [ メッセージ編集済み 編集者: サンジ 編集日時 2008-09-18 12:17 ] |
1