エクセルで作られた各種台帳類をWeb経由で見られないものかと、ちょいと試してみる。ソースはMSDNのサンプル。
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' ページを初期化するユーザー コードをここに挿入します。 Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" + _ "Data Source=" + "C:\Test.xls" + ";" + _ "Extended Properties=Excel 8.0;" 'Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" + _ ' "Data Source=" + Server.MapPath("../Test.xls") + ";" + _ ' "Extended Properties=Excel 8.0;" Try dbConnection = New OleDbConnection(connectionString) dbConnection.Open() 'Excelシートから読み取りするコマンドを作成 Dim dbCommand As OleDbCommand = New OleDbCommand _ ("SELECT * FROM Range1", dbConnection) 'データアダプタ作成 Dim dbAdapter As New OleDbDataAdapter 'コマンドをアダプタに渡す dbAdapter.SelectCommand = dbCommand 'データセット用意 Dim dbDataSet As New DataSet 'データをFill dbAdapter.Fill(dbDataSet, "XLData") 'グリッドに連結 ExcelList.DataSource = dbDataSet.Tables(0).DefaultView ExcelList.DataBind() Catch ex As Exception ErrorLabel.ForeColor = System.Drawing.Color.Red ErrorLabel.Text = ex.Message Finally 'DB切断 dbConnection.Close() End Try End Sub
冒頭の接続文字列を組み立てるところにあるファイル名、Web用の仮想ディレクトリから読み出すなら、Server.MapPathを使う必要がある。直接ローカルのファイルを読む場合、フルパスでOK。結局、エクセルファイルをDBとして使ってしまえ、というもの。ただし、これだとおそらく複数のユーザーによる閲覧に耐えられないと思う。やっぱりダメだ(道理で用例がWebでなかなか見つからないと思った)。
今回、オフィス内にあるファイルサーバー上のファイルを表示させたかったのだが、残念ながら「\\」で始まるパスでも、ネットワークフォルダ設定したパスでも読み出しができなかった。なんかうまい方法ないものだろうか。どうせ競合回避できないからダメだけど。
そうそう、もう1つ書き忘れ。上記コードを使う場合、エクセル上でレンジ選択して、それに「名前」をつけておく必要がある。中盤にあるコマンドオブジェクトに渡すSQL文で、テーブル名に相当するのがこのレンジになる。ここをシートとかにできないのかどうかは、試していない(少なくとも、単純にシート名をつけただけではダメだった)。