- - PR -
VB.NETですでに開いているEXCELの操作
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-08-16 07:34
VB.NETで、既に開いているEXCELブックにあるシートのセルの値を取得したいのですが、
どうすればよいのでしょうか? 対象ブックは、別のExcelのマクロから開いて加工処理をし、未保存の状態です。 対象ブックは保存はしない状態(マクロで開く前の状態)にしておきたいです。 保存されているExcelブックを開き、シートにあるセルの値を取得というのはわかるのですが...。 | ||||||||
|
投稿日時: 2008-08-16 13:02
VB 側と連携できていないので方法としては限られてきますよね。 対象ブックのマクロからどこかに値を吐き出してもらうなど方法はあります。 せめて "別の Excel のマクロ" が VB と連携できていれば、別の Excel のマクロから値を取得することは容易で、そこから VB 側へ値を返すこともまた容易なのですが... 事情がわからないので断言はできませんが、何だかソリューションとして不適切な気がしますね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2008-08-16 14:51
じゃんぬねっとさん、ありがとうございます!
質問内容がうまく説明できていなく、申し訳ありません。
ソリューションとして不適切、確かに自分でも正直なところ、何かすっきりしません。 ・マクロのコードをVBに載せてしまう。 ・マクロで処理した結果をいったん保存し、マクロ内で作成したシート名をVBに返しているので、該当シートをVBから削除する。 こんな風にした方がいいのでしょうか? 現在はVBからマクロのプロシージャに引数を渡し、作成したシート名を返しています。 Dim objXlsApp As Excel.Application Dim objXlsBook AS Excel.Workbook : 省略 strXlsShtNm = _ DirectCast(objXlsApp.Run("'" & objXlsBook.Name & _ "'!make_RemoveData", TxtFileName.Text.Trim, _ CmbSheet.SelectedItem.ToString.Trim), String) strXlsShtNmに作成したシート名が返されるようにしています。 | ||||||||
|
投稿日時: 2008-08-16 18:28
こんにちは、nasです。
じゃんぬねっとさんの話で違う方向に行きそうですが、最初の質問の回答です。 VB.Netの入っている環境にOfficeが入ってないので、VB.Netでは試してはいませんが 最近IronPythonでのExcel操作を覚えましたので、こちらで試してみました。 まず、Excelファイル「test.xls」に以下の簡単なマクロを入れました。
次に、IronPythonを2つ立ち上げて1つはExcel起動&マクロ実行、 1つはExcelオブジェクト取得&シートのデータ取得を行ないました。 ------------------------------------------------------- IronPython 2.0 Beta (2.0.0.3000) on .NET 2.0.50727.1433 Copyright (c) Microsoft Corporation. All rights reserved. >>> import clr >>> clr.AddReference("Microsoft.Office.Interop.Excel") >>> from Microsoft.Office.Interop import Excel >>> app = Excel.ApplicationClass() >>> app.Visible = True >>> app.DisplayAlerts = False >>> fileName="c:\\temp\\test.xls" >>> book=app.Workbooks.Open(fileName) >>> app.Run("test","TEST OK!",100) >>> print book.Worksheets[1].Cells[1,1].Value2 TEST OK! >>> print book.Worksheets[1].Cells[2,1].Value2 100.0 ------------------------------------------------------- IronPython 2.0 Beta (2.0.0.3000) on .NET 2.0.50727.1433 Copyright (c) Microsoft Corporation. All rights reserved. >>> import clr >>> clr.AddReference("Microsoft.VisualBasic") >>> from Microsoft.VisualBasic import Interaction >>> fileName="c:\\temp\\test.xls" >>> book=Interaction.GetObject(fileName) >>> print book.Worksheets[1].Cells[1,1].Value2 TEST OK! >>> print book.Worksheets[1].Cells[2,1].Value2 100.0 ------------------------------------------------------- 上記の様に、VBの「GetObject」を使えば、起動中のExcelオブジェクトを 取得して結果を受け取ることが出来ます。 仕様が不明なので何とも言えませんが、1つにまとめた方がすっきりするとは思います。 では。 [ メッセージ編集済み 編集者: nas 編集日時 2008-08-16 19:32 ] | ||||||||
|
投稿日時: 2008-08-17 03:59
シート名だけじゃなくてセルの値も返してしまえば良いですよね。
なるほど GetObject 関数ですか。 確かにファイルパスがわかっているのですからできますね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2008-08-17 04:51
nasさん、じゃんねっとさん、ありがとうございます!!
GetObject、セルの値も返してしまう、どちらの方法もうまくいきそうです。 目からウロコです。 早速試してみることにします。 ありがとうございました!! |
1