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 を起動するたびにこのアドインが実行されて図面の作成 -> データ接続が行われてしまいます。