気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

いよいよ、「Silverlight 4」のリリースが近づいてきました。私も待ちきれず、VisualStudioのRC版でいろいろ試してみています。
「Silverlight 4」の新機能の中でも、私が最も注目しているのはComオートメーションの機能です。

ExcelとComオートメーション機能を使って、いろいろ試してみているのですが、なかなか快適です。
Silverlightでは遅延バインディングしか対応していないのですが、C# 4.0から導入された「dynamic」キーワードを
使用できるのでかなり楽にきれいなコードを書くことが出来ます。

例えば、Excelを起動してブックを開くコードは以下のようにして記述することが出来ます。

//Excelオブジェクトを生成する
dynamic excelObject = AutomationFactory.CreateObject("Excel.Application");

//Excelを可視化する
excelObject.Visible = true;
excelObject.UserControl = true;

//ブックを開く
dynamic workbooks = excelObject.WorkBooks;
dynamic workbookObject = workbooks.Open("ファイルパス");

以前のC#だとリフレクションの機能を利用して面倒くさいコードを書かないといけなかったので、
かなり楽になりました。

※ComオブジェクトはIDisposableインターフェースを実装しているので使用したオブジェクトは
すべて、Dispose()することをお忘れなく。

ところで、Excel2003とXP、またはVistaの組み合わせだと、Workbookの「Save」、または
「SaveAs」を使用すると、オブジェクトを破棄した後もExcelのプロセスが残ってしまうと
いう衝撃的な問題があるようです。解決策をご存知の方は是非教えてください。

今のところ、WMIをComオートメーションを介して使用して、プロセスをKILLするくらいしか
解決策が思いつきません。。。。


コメント

c#からExcel Documentの制御をするのにリフレクションなんか使う?

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://csfun.blog49.fc2.com/tb.php/78-723128bb