4

ADOを使用してExcel2007スプレッドシートからデータを読み取っています。接続の設定は簡単です。

Dim ado As ADODB.Connection
Set ado = CreateObject("ADODB.Connection")
ado.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=myFilename.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"
ado.Open

ado.OpenSchemaこのオブジェクトで問題なく呼び出すことができます。ただし、データをクエリしようとすると、次のようになります。

Dim rs As ADODB.recordSet
Set rs = ado.Execute("SELECT * FROM [Current Work Load$]")

Nullでいっぱいのテーブルを取得するだけです。

これはMicrosoftサポートサイトで問題として言及されていますが、「インポートモード」を明示的に有効にしました(上記のコードで確認できますIMEX=1)。

4

4 に答える 4

3

Executeメソッドは、アクションクエリの場合のように、レコードを返しません。OpenRecordsetメソッドを試してみることをお勧めします。

Dim rs As ADODB.recordSet
Set rs = ado.OpenRecordset("SELECT * FROM [Current Work Load$]")
于 2009-07-14T16:20:54.967 に答える
2

ここでのADO接続文字列は信じられないほど厄介であることがわかりました。スプレッドシートを読んで動作するようになりましたが、接続文字列が少し異なります。

Provider = Microsoft.ACE.OLEDB.12.0; Data Source = "+ fileName + @"; Extended Properties = "Excel 12.0; IMEX = 1";

(Excel 12.0宣言後のXMLはありません)。

于 2009-07-07T17:58:02.137 に答える
1

SpreadsheetGear for .NETは、Excelブックを読み取ることができ、ADOで発生する可能性のある問題や制限なしに任意のセルにアクセスできます。

ここでライブC#およびVBサンプルを確認し、ここから無料試用版をダウンロードできます

免責事項:私はSpreadsheetGearLLCを所有しています

于 2009-07-07T17:32:08.010 に答える
1

接続文字列で使用IMEX=1するだけでなく、いくつかのレジストリキーを確認する必要があります。詳細については、SOのこの回答を参照してください。

于 2009-07-13T23:15:30.317 に答える