vb6 を使用して Excel (2003) スプレッドシートから値のテーブルを抽出しようとしています。その結果は (adodb) レコードセットに保存する必要があります。テーブルは次のようになります。
名前 Option.1 Option.2 Option.3 Option.4 Option.5 Option.6 -------------------------------------------------- --------------- 名前1 2 3 4 名前2 2 3 4 名前3 2 3 4 名前4 2 3 4 名前5 2 3 4 名前6 2 3 4 名前7 2 3 4 名前8 2 3 4 名前9 2 3 4 5 6 7
SELECT * FROM [Sheet1$]
クエリ " " または列固有のクエリ " " (脚注 1 を参照)を接続して実行しSELECT [Option#6] FROM [Sheet1$]
、結果をループすると、正しい値 5、6、および 7 ではなく、Null
行-->の値が与えられます。スプレッドシートへの接続は、有効なテーブル制限を決定する「最良の推測」を使用しているようで、設定された行数のみが考慮されます。 Name9
Option.4
Option.6
スプレッドシートに接続するために、両方の接続プロバイダーを試しましMicrosoft.Jet.OLEDB.4.0
たMSDASQL
が、同じ問題が発生します。
私が使用する接続設定は次のとおりです。
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=Excel 8.0;"
- - - - OR - - - -
.Provider = "MSDASQL"
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & filePath & ";MaxScanRows=0;"
.CursorLocation = adUseClient
.Open
End With
Set rsSelects = New ADODB.Recordset
Set rsSelects = cn.Execute("SELECT [Option#5] FROM " & "[" & strTbl & "]")
この問題は、行数が 8 行 (列名を除く) を超えている場合にのみ発生MaxScanRow=0
し、MSDASQL
接続を設定しましたが、同じ結果になりました。
私が含めた注目すべきプロジェクトの参考資料は次のとおりです。
- MS ActiveX データ オブジェクト 2.8 ライブラリ
- MS ActiveX データ オブジェクト レコードセット 2.8 ライブラリ
- MS Excel 11.0 オブジェクト ライブラリ
- MS データ バインディング コレクション VB 6.0 (SP4)
この問題で何か助けていただければ幸いです。
(1) なぜかカラム名に小数点を含めると#と解釈される。
みんな、ありがとう!KB155512 onedaywhenの優れた投稿Schema.ini
から「プログラムで」セットアップしようとしている途中で、解決策が示されました。
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & filePath & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
同様の問題を抱えている人には、投稿とコメントを読むことをお勧めします。解決策は人によってわずかに異なるためです.