2017-09-12 6 views
1

ACE.OLEDB.12.0で以下の接続文字列を使用してXLSXスプレッドシートからデータを読み込みましたが、IMEX = 1に設定していますIBEX = 1を完全に削除しても機能しません。IME = 1でACE.OLEDB.12.0を使用してExcelシートを読む

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Working Folder\ICDE\Ramsden 4.xlsx;Extended Properties=""Excel 12.0 xml;HDR=No;IMEX=1;""" 

IMEX = 1がすべてのデータをテキストとして読み込むという印象があったので誰も説明できないので、より安全でした。

JP

答えて

1

= 1 IMEXはテキストとしてすべてのデータを返さない

感謝。それは非常に一般的な誤解です。

OLEDBは、最初のn行(デフォルト= 8)をスキャンし、データタイプを決定します。 IMEX = 1を省略すると、そのデータ型に一致しない値についてはNullが返されます。 IMEX = 1を指定し、スキャンで混合データ型が検出された場合は、テキストが返されます。シートにテキストヘッダーがある場合は、HDR = Noと指定してヘッダーを破棄して、この処理を手助けすることができます。しかし、OLEDBはです。常には最初のn行をスキャンしてデータ型を決定し、それに応じて結果を返します。

スキャンする行は、TypeGuessRowsの値によって決まります。

古いMicrosoft.Jet.OLEDB.4.0ドライバでは、接続文字列にTypeGuessRowsを指定できますが、Microsoft.ACE.OLEDB.12.0では指定できません。 TypeGuessRowsは現在、64ビットマシン上で実行されている

Excel 2007: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows 
Excel 2010: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows 
Excel 2013: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\15.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows 

32ビットアプリケーションがWOW6432NODEの下でそれらを見つけるでしょう...下のレジストリに保持されています。例...

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows 

これは私の意見では逆行的なステップですが、正当な理由が必要です。見つけた場合は、私たちに知らせてください。

+0

あなたの説明をありがとう。 IMEXの後の数字はスキャンする行の数ですか? – JPScerri

+0

いいえ、悲しいことではありません。スキャンする行は、上で概説したようにTypeGuessRowsとしてレジストリにあります。 –

+0

IMEX値の列挙子はありますか? – JPScerri

関連する問題