質問

Excelファイルを読み込むためにOLEDBを使用します。一方の列の1つは「一般的な」フォーマットを持ち、文字と数字からなる値の両方の文字列を含みます。文字列値は問題なく検索されますが、純粋な数値はDBNullとして取得されます。

解決方法?

次の接続文字列を使用して Excel 2003ファイル(XLS):

"Provider=Microsoft.Jet.OLEDB.4.0;
 Data Source=C:\\file.xls;
 Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""
.

役に立ちましたか?

解決

私はあなたのシナリオに適用されるマイクロソフトのウェブサイトに関するいくつかの文書を見つけました。彼らはすべての数値数を文字列に変換することを勧めます。

> http://support.microsoft.com/kb/257819

以前に述べたように、ADOはExcelワークシートまたは範囲の各列のデータ型を推測しなければなりません。(これはExcel Cellフォーマット設定の影響を受けません。)同じ列内のテキスト値と数値を混在させた場合、深刻な問題が発生する可能性があります。JETとODBCプロバイダの両方が多数タイプのデータを返しますが、少数データ型のNULL(EMPTY)値を返します。2つのタイプが列内で等しく混在している場合、プロバイダはテキスト上で数値を選択します。

例えば:

* In your eight (8) scanned rows, if the column contains five (5) numeric values and three (3) text values, the provider returns five (5) numbers and three (3) null values.
* In your eight (8) scanned rows, if the column contains three (3) numeric values and five (5) text values, the provider returns three (3) null values and five (5) text values.
* In your eight (8) scanned rows, if the column contains four (4) numeric values and four (4) text values, the provider returns four (4) numbers and four (4) null values.
.

他のヒント

私は同じ問題があり、文字列値があります。数値が返されますが、文字列値はnullとして返されます。文字列値として数値をロードしたいです。列には数字と非数字のコードを含めることができます(例:100344567、PRD001X01)。

Excel Driverは、最初の8行の値が数値型であるため、列が数値型であることを考慮します。

セルをテキスト(フォーマットセル)として定義しても機能しません。

ドライバに文字列として列を「参照」に強制すると、単に数値の前に引用を入れています( '100344567)。これにより、数値が文字列に変わります。

この8行の値は、レジストリHKEY_LOCAL_MACHINE \ SOFTWARE¥Microsoft¥Jet¥4.0¥Excens¥Excel¥ - > typeguessrows= 8です。

私はそれが助けることを願っています

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top