|
分類:[VB.NET/VB2005 以降]
こんにちは
開発環境はVB.NET2005 WINXP Excel2007です。 プログラムしているところで、行き詰ってしまいました。 試行錯誤してみたのですがどうにもうまくいきません。 どうか、よろしくお願いいたします。 タイトルのようにVB.NETでエクセルを使ったADOデータベース処理を行っています。 うまくいかなくなったのは読み取りパスワード付きのエクセルファイルを開いて、処理するようにしてからです。パスワードがかかっている場合、一度、同ファイルをopen(ブックを非表示で)しておいてからデータベース参照をしなくてはならないようです。 しかしこの実行前にopenするエクセルデバックする前にエクセルが一つでも開いていると、そちらのエクセルのウィンドウ(グループ)にデータベースの参照がいってしまい、読み取り専用で2重に開かれてしまいます。何とか実行前に開いているエクセルのほうに処理が行ってしまわないようにしたいのですが。 以下の例ようにコーディングしました。
Dim xlApp As New Microsoft.Office.Interop.Excel.Application 'エクセルデータ用 Dim xlBooks As Microsoft.Office.Interop.Excel.Workbooks Dim xlbook As Microsoft.Office.Interop.Excel.Workbook Dim Filename ,Sheetname As String Dim cnn As New System.Data.OleDb.OleDbConnection Dim cmm As New System.Data.OleDb.OleDbCommand Dim daa As New System.Data.OleDb.OleDbDataAdapter Dim dss As New DataSet
xlBooks = xlApp.Workbooks xlbook = xlBooks.Open("c:\test.xls", , , , "1234")'事前にopenする FileName = System.IO.Path.Combine("c:\test.xls") 'データベースに接続するための情報を設定 cnn.ConnectionString = "provider=Microsoft.jet.OLEDB.4.0;Data source=" & FileName & ";Extended properties=""Excel 8.0;HDR=YES;IMEX=1""" 'コネクションの設定 cmm.Connection = cnn 'Excelファイルのシート名を設定 SheetName = "Sheet1" 'データソースで実行するSQL文の設定 cmm.CommandText = "select * from [" & SheetName & "$]" daa.SelectCommand = cmm daa = New System.Data.OleDb.OleDbDataAdapter(cmm) dss = New System.Data.DataSet 'データを取得 daa.Fill(dss)
以上です。 よろしくお願いいたします。
|