4

次のようなExcelファイルがあります。

|   |    A   |    B    |    C    |   D    |
| 1 | Name 1 |  Name 2 |  Name 3 | Name 2 |
| 2 |  Data  |  Data   |  Data   | Data   |
| 3 |  Data  |  Data   |  Data   | Data   |

ご覧のとおり、2 つの列のヘッダーは同じ名前 - Name 2を持っています。

私の質問は、どの列からデータを選択するかを ADO エンジンに伝えることは可能ですか?

現在、私の選択は次のようになります。

SELECT [Name 1], [Name 2] FROM [REPORT7_RAW$] WHERE [Name 1] IS NOT NULL

ADOはB、Excelの列の下にリストされている列からデータを取得します。つまり、指定された名前を持つ最初の列を取ります。残念ながら、同じ名前の列が 2 つあり、 column からデータを取り出したいと考えていますD。出来ますか?

名前ではなくインデックスで列を選択する方法が見つかりませんでした。

4

1 に答える 1

4

データ ヘッダー名が使用されないように、接続文字列を変更する必要があります。通常の接続文字列は次のようになります。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES";

HDR=YES最後のビット ,をに変更する必要がありますHDR=NO

そのタイプの接続では、列 (​​フィールド) は 、 などになりますF1F2ここで、F1= 列 A、F2= 列 B などです。

名前ではなく列の番号に基づいてクエリを実行しているため、これは理想的ではありませんが、列名が重複している場合は、これが唯一の回避策です。

@barrowc からのコメントによると: この形式の接続文字列は、列名をデータとして扱います。そのため、クエリによっては、列名を含む行を除外するコードを含める必要がある場合があります。

于 2013-08-21T14:46:34.297 に答える