web-dev-qa-db-ja.com

ExcelファイルのOleDB接続文字列のヘルプ

私が抱えている問題は、データアダプタが各列の最初の行のみを調べてデータ型を判別していることです。私の場合、最初の列「SKU」は最初の500行の数字であり、数字と文字が混在するSKUがあります。したがって、最終的に発生するのは、SKU列の行が空白のままになっていることですが、それでも各列行の他の情報を取得します。

それを制御するのは接続文字列であり、現在の設定では機能するはずですが、そうではありません。

接続文字列:

conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx" + @";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0""";


ImportMixedTypes=Text;TypeGuessRows=0

重要なキーワードである必要があります。0行を見て、すべての値型としてテキストを使用してください。

私がこれに付けた「バンドエイド」は、スプレッドシートの最初の行を文字と数字の混合にし、具体的にはその行をクエリから除外することです。

20
The Muffin Man

残念ながら、接続文字列からImportMixedTypesまたはTypeGuessRowsを設定することはできません。これらの設定は、レジストリで定義されているためです。 ACE OleDbドライバーの場合、これらは次の場所に保存されます。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel

レジストリ内。したがって、接続文字列を次のように簡略化できます。

conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;""";

レジストリでTypeGuessRows0に、ImportMixedTypesTextに設定すると、期待どおりの動作が得られるはずです。ただし、インポートパフォーマンスが理想的とは言えない場合は、ゼロではなく1000などの適切な大きさの数値を使用することを検討してください。

30
arcain