- - PR -
VBからC#へ(Excelファイルの生成に関する質問)
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-10-12 09:25
既に何件かExcelファイルの生成に関しての議題は上がって
いるようなのですが、私の知りたい点に関して書かれていた スレッドが見当たらなかったので質問させてください。 今、以下のようにVBで書かれているプログラムを移植している 最中です。 Dim objApp As Object Dim objWbk As Object objWbk = GetObject("C:\Temp\Test.xls") objApp = objWbk.Application ---ここでセルなどの操作を行います objApp.Quit() いくつかの資料を調べるとエクセルの参照設定を行う方法は 見つかったのですが、上記のプログラムのように参照設定を まったく持たずにエクセルを操作する方法はC#では、見当たり ませんでした。 そこで2点に関して疑問があります。 1.上記のプログラムのように参照設定を行わずにエクセルを 操作する方法はC#にはないのでしょうか。 2.もし参照設定を行うしかないとして、私の開発環境は OfficeXPをいれていますが、クライアントの運用環境は Office97または2000である可能性が高いのですが、運用時に 問題が発生することはないのでしょうか。(実際はこれが 心配で上記のようなレイトバインディングを使っている わけです) エクセルの操作といってもセルに値や書式を設定する程度の 機能で、バージョンに依存するような機能は使っていません。 もし何らかの情報をお持ちの方がおられましたら どうかヒントなどでも結構ですので教えてください。 | ||||
|
投稿日時: 2003-10-12 14:55
こんにちわ。諸農です。
マイクロソフトサポート技術情報-302902 [HOWTO] Visual C# .NETでOfficeオートメーションサーバーをバインドする方法 http://support.microsoft.com/default.aspx?scid=kb;JA;302902 に書かれている「遅延バインディング」が参考になるかもしれません。 ではでは(^^)/ _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2003-10-12 15:22
ただし、遅延バインディングを行うと、IDE環境でインテリセンスが利かなくなります。実行時に型の解釈を行うので、若干処理速度が低下します。
| ||||
|
投稿日時: 2003-10-12 16:23
Jubei(諸農)さん、Jittaさん、ありがとうございます。
実は、おっしゃられているレイトバインディングの記事は私も見たんです。 ただ、私の中に引っかかっていることは、やはりこのレイトバインディングの 例でも、事前に参照設定を行わなければならず、かつコーディング中でも Excel.Applicationオブジェクトを直接指定して使っています。 VBにおいて、GetObject関数を用いるにあたっては、一切このプロセスを 必要としませんでした。 元来レイトバインディングのメリットは実行時まで特定のオブジェクトを必要と しないところにあると思うのですが。 これは私にとっては結構な問題点なんです。 今回は確かにExcelの簡単なセル操作のみのサブルーチンなんですが、 他にも、GetObjectで取ってきたオブジェクトがExcelのWorkBooksでも WordのDocumentでも自動的に操作できるよう組んであるサブルーチンなども あるため、事前に参照設定が必要であったり、コード中に直接Excel.Application という形でオブジェクトを特定してしまうのは、移植する上で大きな障害と なってしまうのです。 それで、このGetObjectの手法に結構こだわっているわけでもあります。 なんとかすっきりと移植する方法はないものなのでしょうか。 | ||||
|
投稿日時: 2003-10-12 17:31
Microsoft.VisualBasic.Interaction.GetObject をそのまま使うのが一番簡単では? | ||||
|
投稿日時: 2003-10-12 20:35
よねKENさん、ありがとうございます。
>Microsoft.VisualBasic.Interaction.GetObject >をそのまま使うのが一番簡単では? その手も考えたのですが、折角VBからC#に移行しようとしているので できるだけVBのしがらみからとかれたかったので、.NET Framework 特有の方法を探していたのです。 でも、やっぱりVBの機能を呼び出すしかないのかな。 | ||||
|
投稿日時: 2003-10-12 20:36
C# では、この方法はお奨めできません。 C# で本当のレイトバインディングを行う場合、リフレクションの機能をもろに使って呼び出す必要があります。 VBの場合は、(開発時では)インテリセンスが効かない程度の弊害ですが、C# の場合、通常のメソッドの記述では呼び出す事が出来ません。とっても泥臭いコードになるはずです。 はっきり言って、どうしてもレイトバインディングでやりたいのならVBでやるのが無難です。 | ||||
|
投稿日時: 2003-10-22 14:16
遅くなりましたが、なちゃさんどうもありがとうございました。
>はっきり言って、どうしてもレイトバインディングでやりたいのならVBでやるのが >無難です。 結局、今回は時間が無かったためVB.NETでレイトバインディングのクラスライブラリを 作成して、それをC#から呼び出す方法を取りました。 >C# で本当のレイトバインディングを行う場合、リフレクションの機能をもろに使って >呼び出す必要があります。 調べれば調べるほどその通りですね。 簡単に実現できる方法がないか、もうしばらく模索してみることにします。 ありがとうございました。 |
1