こちらのエントリーで、VSTOからExcel2007を操作する方法がCOMっぽいと書いたのですが、やっぱりCOM経由のようですね。
MSDNオンラインイベントで、VSTOを使用してExcel2007を操作するサンプルがあるのですが、これは以下の名前空間を利用してExcel2007を操作しています。動作も確認済みです。
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
『Visual Studio 2008 による the 2007 Microsoft Office sysrem 開発概要』より
一方、.NETからCOM経由でExcel2007を操作するには、参照設定で「Microsoft Excel 12.0 Object Library」を追加しますが、その際追加される参照は以下のものになります。
- Microsoft.Office.Core
- Microsoft.Office.Interop.Excel
- VBIDE
VSTOと同じですね。
ですので、VSTOでExcel操作する場合も、COM経由でExcel操作する場合も、同じようにCOMを使用していると思われます。VSTOで「Microsoft Excel 12.0 Object Library」を参照追加したら、重複エラーになりましたし。
実際、Excel.Sheetオブジェクトを渡して処理する関数を作成したのですが、VSTOでもCOMでも同じプログラムでExcelを操作できました。
それで何が気になるかというと、COM経由でExcelを操作した場合は参照を必ず解放する必要があるかということです。
VSTOでもCOM経由でExcelを呼び出していると思われるので、参照は解放する必要があると思われます。
MSDNオンラインイベントのサンプルでは参照の解放は記述されていませんが、ちょっと注意したい内容ですね。
(2008.2.10追記)
もしかしたらVSTOの場合は、インターフェースはCOMと同じですが参照の解放は違うのかもしれません。この辺はまだよく分からないので、今後調べていこうと思います。
(2008.2.10さらに追記)
こんな情報を発見しました。
本回答のために「COM オブジェクトを解放する」という Tips を書きましたが、あの記事では、適正を持っていないと (?) 'どんな時に解放漏れが起きるのか' が、わからない (?) みたいです。
(連続したオブジェクトへのパス、コレクションから要素を取り出す時、だけ注意するだけなのですけどね...)
私の場合、どうしても使いたい場合は、VSTO か VBA 側のマクロで対応するでしょう。
Excel、COM、解放、参照カウント、デクリメント...
ttp://blogs.wankuma.com/jeanne/archive/2006/07/25/33568.aspx
Compared with other platforms for creating Outlook add-ins, VSTO 2005 provides these advantages
・Graceful add-in shutdown without the need to explicitly manage all COM object references
Outlook Add-ins with Visual Studio Tools for Office
ttp://www.outlookcode.com/article.aspx?id=42
.NET developers often struggled. Their code had to deal with the way Office maintained object lifetimes and they had to contend with lots of COM plumbing. In addition, the managed code solution was limited to running outside the process of the Office application. What was missing was a layer between the PIAs and the developer’s custom application. Microsoft Visual Studio Tools for Office (VSTO) fills that gap. Visual Studio Tools for Office extends the Visual Studio environment to support the development of managed code solutions for Microsoft Office.
SpringerLink - 書籍の章
ttp://www.springerlink.com/content/g2r8076888012760/
ふーむ。VSTO2005の時点からCOM参照の解放は必要なくなっているように見えます。
ExcelでVSTOのサンプルアプリケーションを作成していますが、確かにCOM参照の解放なしでもExcelプロセスは残っていませんし。
まだこれが答えだとは言い切れませんが、MicrosoftのVSTOサンプルにCOM参照の解放がないのはこれが理由なのかもしれませんね。
(2008.2.10さらに追記)
ようやく分かりました。VSTOでは「PIA:Primary Interop Assembly:プライマリ相互運用アセンブリ」という仕組みを使って、OfficeのCOMをマネージ・コードでラップするため、COM参照の解放をしなくてもいいようになっているんですね。
Office 2003 アドイン用の.NETアセンブリは、この.NET Frameworkのテクノロジが利用できるという点で、従来のOfficeマネージCOMアドインとは異なるものである。Office 2003用の.NETアセンブリを作成するには、Visual Studio .NET 2003用のプロジェクト・テンプレートである「Visual Studio Tools for the Microsoft Office System(以降、VSTO)」を使う必要がある。
Office 2003で変わる業務アプリケーション - @IT
従来からOffice COMアドインを使うことができたが、Office 2003で追加されたVSTOソリューションを使うことで、Office Systemソリューションをマネージ・コード拡張することができる。
VSTOは「VBA」用のCOM APIを.NET言語で利用できるようにマネージ・コードでラップしたもの(これを「PIA:Primary Interop Assembly:プライマリ相互運用アセンブリ」と呼ぶ)を使って(インポートして)開発を行うものである。
@IT:特集 .NET言語による次世代Officeソリューションの開発
■参考サイト
■関連エントリー