VSTO でデータ接続

先日紹介した VSTO を使ってアドインを作ってみます。とはいうものの、非常にわかりやすいサンプルと記事がこちらにあるので、データ系の新 API を使ってみます。

先月は Visio 2007 のデータ接続機能を一気に紹介しました。流れとしては

  • データ接続とインポート
  • 図形とデータのリンク
  • データグラフィックの作成と適用

でしたね。 各ステップにあてはまる API が用意されているので徐々に見ていきましょう。今日は最初のデータ接続とインポートをやってみます。添付した Excel ファイルに接続します。

こちらの記事に従い、VS2005 と VSTO で新しいプロジェクトを作成します。向こうは VB なのでこちらは C# を使いましょう。ThisAddIn_Startup イベントにコードを記入していきます。まずは空白の図面を作成し、

Visio.Document newDocument = Application.Documents.Add("");

インポートしたデータの受け皿である DataRecordset オブジェクトを作成します。

Visio.DataRecordset vsoDataRecordset_Test;

この後、図面オブジェクトのメソッドを使ってデータ接続をしていくわけですが、やり方は SQL などに接続する方法とほとんど同じです。接続文字列と接続コマンドを、専用のメソッドに渡します。接続文字列と接続コマンドを文字列データとして定義します。

string XLConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=D:\\test\\sales.xls;" +
"Extended Properties=Excel 8.0;"

string XLCommStr = "SELECT * FROM SalesFigures"

普段あまりやらないので Excel に接続する時の接続文字列ってどうするんだっけ? とちょっと悩んでしまいますが、リファレンスを調べるとすぐに見つかります。今回は D:\test\sales.xls の SalesFigure シートにあるデータをすべて読み込むことにします (太字の箇所で指定しています)。

そして先ほど紹介したメソッドにパラメータとして渡します。4 つ目のパラメータには任意の文字列を渡します。このオブジェクトのデータの中身がわかる文字列にしておくとよいでしょう。

vsoDataRecordset_Test = newDocument.DataRecordsets.Add(
XLConnStr,
XLCommStr,
0,
"SalesInfo");

これでリンクとインポートが完了です。レコードセット オブジェクトである vsoDataRecordset_Test にはこちらにあるメソッドやプロパティを使うことができます。データの中身にアクセスしたり DataAsXMLで今あるデータを XML 形式で取得したりと、いじりがいがありますが、ここでデータをいじっても元の Excel ファイルの情報は書き換えられません。

無事ビルドができたら、実行してみてください。 Visio 2007 が起動し、白紙の図面が作成されます。[表示] - [外部データ ウィンドウ] と操作すると、インポートされているデータのプレビューが表示できます。

さて、確認が終わったらセキュリティ センターでこのアドインをオフにするか、削除してください。そうしないと Visio を起動するたびにこのアドインが実行されて図面の作成 -> データ接続が行われてしまいます。

sales.xls