tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルEXCEL2003ファイルをMDBファイルへのインストール方法
記事No11456
投稿日: 2015/07/28(Tue) 12:01
投稿者HELP
VB2005でEXCEL2003ファイルのシート(複数シートのうち一つのシート)をMDBテーブルにインポートしたいです。
一応、PGでは1つ目のEXCELファイルのシートはインポートできるのですが、2つ目以降はシートオブジェクトが
存在しないためインポートできない状態です。以下、PGを記載しておきます。
お忙しいところ申し訳ありませんが、ご教授いただければと思います。

Private sub

'MDB との接続を確立する(作業用MDB)
        cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;" & _
             "Data Source=" & My.Settings.DirecFile3 & ";" & _
                 "Persist Security Info=False ;" & _
                 "Jet OLEDB:Database Password=" & My.Settings.Password & ";")

'補助コードディレクトリ情報取得
                    Direc_Name = keihi_DDirec
                    '補助コードファイル情報取得
                    File_Name = Keihi_DName
                    '補助コードインポート先テーブル名情報取得
                    ImpTable_Name = My.Settings.TableName2
                    '補助コードインポート対象シート名情報取得
                    ImpSheet_Name = Get_SheetName(Direc_Name, File_Name)
                    '補助コード文言情報取得
                    WordString1 = "補助コードデータ"

end sub


Private Function

       ' エクセルDBの指定
        strConnect = "[Excel 8.0;database=" & Direc_Name & "\" & File_Name & "].[" & ImpSheet_Name & "]"
        'SQL設定
        strSQL = "INSERT INTO " & ImpTable_Name & " SELECT * FROM " & strConnect
      
        'SQL実行
     cnn.Execute(strSQL)

end Function

[ツリー表示へ]
タイトルRe: EXCEL2003ファイルをMDBファイルへのインストール方法
記事No11457
投稿日: 2015/07/28(Tue) 12:04
投稿者HELP
申し訳ありません。コードを再度記載しておきます。

Private sub

'MDB との接続を確立する(作業用MDB)
         cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Data Source=" & My.Settings.DirecFile3 & ";" & _
                  "Persist Security Info=False ;" & _
                  "Jet OLEDB:Database Password=" & My.Settings.Password & ";")

'補助コードディレクトリ情報取得
                     Direc_Name = keihi_DDirec
                     '補助コードファイル情報取得
                     File_Name = Keihi_DName
                     '補助コードインポート先テーブル名情報取得
                     ImpTable_Name = My.Settings.TableName2
                     '補助コードインポート対象シート名情報取得
                     ImpSheet_Name = Get_SheetName(Direc_Name, File_Name)
                     '補助コード文言情報取得
                     WordString1 = "補助コードデータ"
  '対象Excelインポート処理
           If Excel_Imp(Prog, Direc_Name, File_Name, _
                        ImpSheet_Name, ImpTable_Name, WordString1) = False Then
               Exit Function
           End If

end sub


Private Function Excel_Imp as Boolean

        ' エクセルDBの指定
         strConnect = "[Excel 8.0;database=" & Direc_Name & "\" & File_Name & "].[" & ImpSheet_Name & "]"
         'SQL設定
         strSQL = "INSERT INTO " & ImpTable_Name & " SELECT * FROM " & strConnect
      
         'SQL実行
     cnn.Execute(strSQL)

end Function


> VB2005でEXCEL2003ファイルのシート(複数シートのうち一つのシート)をMDBテーブルにインポートしたいです。
> 一応、PGでは1つ目のEXCELファイルのシートはインポートできるのですが、2つ目以降はシートオブジェクトが
> 存在しないためインポートできない状態です。以下、PGを記載しておきます。
> お忙しいところ申し訳ありませんが、ご教授いただければと思います。
>
> Private sub
>
> 'MDB との接続を確立する(作業用MDB)
>         cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;" & _
>              "Data Source=" & My.Settings.DirecFile3 & ";" & _
>                  "Persist Security Info=False ;" & _
>                  "Jet OLEDB:Database Password=" & My.Settings.Password & ";")
>
> '補助コードディレクトリ情報取得
>                     Direc_Name = keihi_DDirec
>                     '補助コードファイル情報取得
>                     File_Name = Keihi_DName
>                     '補助コードインポート先テーブル名情報取得
>                     ImpTable_Name = My.Settings.TableName2
>                     '補助コードインポート対象シート名情報取得
>                     ImpSheet_Name = Get_SheetName(Direc_Name, File_Name)
>                     '補助コード文言情報取得
>                     WordString1 = "補助コードデータ"
>
> end sub
>
>
> Private Function
>
>        ' エクセルDBの指定
>         strConnect = "[Excel 8.0;database=" & Direc_Name & "\" & File_Name & "].[" & ImpSheet_Name & "]"
>         'SQL設定
>         strSQL = "INSERT INTO " & ImpTable_Name & " SELECT * FROM " & strConnect
>      
>         'SQL実行
>      cnn.Execute(strSQL)
>
> end Function

[ツリー表示へ]
タイトルRe^2: EXCEL2003ファイルをMDBファイルへのインストール方法
記事No11458
投稿日: 2015/07/28(Tue) 17:34
投稿者魔界の仮面弁士
> strConnect = "[Excel 8.0;database=" & Direc_Name & "\" & File_Name & "].[" & ImpSheet_Name & "]"
IMEX 指定抜きで大丈夫ですか?

それはさておき、生成される文字列が、
 [Excel 8.0;database=C:\folder\file.xls].[Sheet2]
なのだとしたら、それを
 [Excel 8.0;database=C:\folder\file.xls].[Sheet2$]
という表記に変更してみて下さい。また、出力範囲が分かっている場合は
 [Excel 8.0;database=C:\folder\file.xls].[Sheet2$B3:AK48]
のように指定することもできます。


> > 2つ目以降はシートオブジェクトが存在しないためインポートできない状態です。

質問の意図が良く分かりませんが、存在するシートしか指定できません。

どんなシートがあるか分からないのであれば、Excel オートメーションで
Worksheets コレクションを列挙するか、もしくは GetOleDbSchemaTable で
OleDbSchemaGuid.Tables を問い合わせましょう。


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ListBox1.DataSource = GetExcelSheets("C:\TEMP\test.xls")
End Sub

Private Function GetExcelSheets(ByVal xlsPath As String) As List(Of String)
      Dim cb As New OleDbConnectionStringBuilder()
      If IntPtr.Size = 8 Then
          '64bit環境では JET が使えないので、ACE Provider で代用
          cb.Provider = "Microsoft.ACE.OLEDB.12.0"
      Else
          '32bit環境では JET Provider を利用(ACE でも可)
          cb.Provider = "Microsoft.JET.OLEDB.4.0"
      End If
      'xls 形式の場合は JET プロバイダでも OK ですが、
      'xlsx 形式を扱う場合は、ACE プロバイダが必要です
      cb.DataSource = xlsPath
      cb("Extended Properties") = "Excel 8.0;ISAM=1;HDR=NO"

      Using conn As New OleDbConnection(cb.ConnectionString)
          conn.Open()
          Dim tbl As DataTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
          conn.Close()
          Return (From r In tbl Select r.Field(Of String)("TABLE_NAME")).ToList()
      End Using
  End Function

[ツリー表示へ]
タイトルRe^3: EXCEL2003ファイルをMDBファイルへのインストール方法
記事No11459
投稿日: 2015/07/28(Tue) 17:43
投稿者魔界の仮面弁士
>       Using conn As New OleDbConnection(cb.ConnectionString)
>           conn.Open()
>           Dim tbl As DataTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
>           conn.Close()
>           Return (From r In tbl Select r.Field(Of String)("TABLE_NAME")).ToList()
>       End Using

失礼しました。VB2005 という点を見落としていました…。

修正版はこちら。(折角書いたので、元のコードは残しておきます)


Dim sheets as New List(Of String)()
Using conn As New OleDbConnection(cb.ConnectionString)
    conn.Open()
    Dim tbl As DataTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
    For Each row As DataRow in tbl.Rows
        sheets.Add(row("TABLE_NAME").ToString())
    Next
    conn.Close()
End Using
Return sheets

[ツリー表示へ]
タイトルRe^4: EXCEL2003ファイルをMDBファイルへのインストール方法
記事No11460
投稿日: 2015/07/29(Wed) 11:29
投稿者HELP
魔界の仮面弁士さん、ありがとうございました。シート名は取得できていたので、$を加えるだけでデータをシートから取得できるようになりました。まだ、初心者のこともあり微妙なところでつまづきます。
早くなれるようにしていきます。

> >       Using conn As New OleDbConnection(cb.ConnectionString)
> >           conn.Open()
> >           Dim tbl As DataTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
> >           conn.Close()
> >           Return (From r In tbl Select r.Field(Of String)("TABLE_NAME")).ToList()
> >       End Using
>
> 失礼しました。VB2005 という点を見落としていました…。
>
> 修正版はこちら。(折角書いたので、元のコードは残しておきます)
>
>
> Dim sheets as New List(Of String)()
> Using conn As New OleDbConnection(cb.ConnectionString)
>     conn.Open()
>     Dim tbl As DataTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
>     For Each row As DataRow in tbl.Rows
>         sheets.Add(row("TABLE_NAME").ToString())
>     Next
>     conn.Close()
> End Using
> Return sheets

[ツリー表示へ]