VSTO 他のシートのコードの呼び出し
こんにちは、naginoです。
Java&JavaScriptの開発に関わりながら、Accessのツールの保守と、C#での開発をしつつ、現在VB.NETでVSTOの開発中という、言語が入り混じった状況で手一杯です。
さて、VSTOです。
目下VSTOの開発が一番直近の締め切りのため、必死です。
ユーザがパラメータをあるシートに入力し、ボタンを押すと、パラメータに合致するデータをAccessのDBから取得し、他のシートに表・グラフで表示する、というレポート系のツールを開発中です。
VSTOは初めて扱うので、右も左もわからなかったのですが、AccessのDBからデータを貼り付けるところまではOLEDBを使って出来ました。
ですが、DataTableからデータを単純にセルに貼り付けるうまい方法が思いつかず、結局ループで処理してしまいました。
なお、OLEDBの処理に関わるオブジェクトの後処理までちゃんとしている(はず)です。
もちろん、この後DB接続に関する部分は別クラスにまとめる予定です。
01: Friend Sub LoadData(ByVal connString As String)
02: Using conn As New OleDbConnection(connString)
03: Try
04: conn.Open()
05: Dim dt As New DataTable()
06:
07: Using cmd As New OleDbCommand()
08: cmd.Connection = conn
09: cmd.CommandText = "クエリ"
10: cmd.CommandType = CommandType.Text
11: Using sda As New OleDbDataAdapter(cmd)
12: sda.Fill(dt)
13: End Using
14:
15: Dim i As Integer
16: For i = 0 To dt.Rows.Count - 1
17: Globals.Test01.Cells(i, 1) = dt.Rows(i)("列1") 'ここでデータをセルに貼り付け
18: Globals.Test01.Cells(i, 2) = dt.Rows(i)("列2") '美しくない
19: Globals.Test01.Cells(i, 3) = dt.Rows(i)("列3") 'まるでASP/VBScriptのよう
20: Next
21:
22: End Using
23: Finally
24: conn.Close()
25: End Try
26: End Using
27: End Sub
アクセスレベルがFriendなのは、他のシートに紐付くビハインドコードから呼び出すためです。
呼び出し方がなかなか解らず苦労したのですが、、同一のnamespace内のときは、たとえば以下で対応していますが、果たしてこれが正しいのかどうかも不明です。
Globals.シート名.LoadData("接続文字列")
このあたりの単純な情報さえ、なかなかまとまったドキュメントが見当たらず、苦労しています。