VB2008で、Excelのデータを以下のようにDataTableに格納しています。
'Excel Open
Dim con As OleDb.OleDbConnection = New OleDb.OleDbConnection
con.ConnectionString = _
"provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=" & Excelファイル名 & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""
con.Open()
'データの取得(DataTable)へ格納
Dim sql as String = "SELECT Data1, Data2 FROM [Sheet1$]"
Dim cmd As OleDb.OleDbCommand = _
New OleDb.OleDbCommand(sql, con)
Dim dt As New DataTable
Dim oleDa As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(cmd)
oleDa.Fill(dt)
ここで、Excelの[Sheet1]シートのData2列の値は、数値と文字列が混在していますが、
値をとろうとすると、Data2列の数値以外の文字が入っている行のDataTable「dt」のData2の値がからっぽ(NULL?)になっているようです。
MsgBox("【" & dt.Rows(対象の行).Item("Data2") & "】") '←【】と表示される
この列の数値の値は正しく取得できているようです。
数値以外の値が入っている場合は、値を取得できないのでしょうか?
どなたかご存じの方、教えてください。よろしくお願いします。
インポートモードで取りこむために、接続文字列に「IMEX=1」を加えてみてください。
以下、IMEX=1 を指定した接続文字列の例と、IMEX の動作に関する資料:
http://msdn.microsoft.com/ja-jp/library/system.data.oledb.oledbconnectionstringbuilder.trygetvalue.aspx
http://msdn.microsoft.com/ja-jp/library/ms254978%28VS.80%29.aspx#sectionSection7
http://support.microsoft.com/kb/257819/ja
魔界の仮面弁士さん、ご連絡が遅くなりまして申し訳ございませんでした。
「IMEX=1」および教えていただいたサイトを参考にします。ありがとうございました。
ツイート | ![]() |