6

OleDBを使用してExcelファイルを読み取ります。列の1つは「共通」形式であり、文字を含む文字列と数値のみで構成される値の両方が含まれています。文字列値は問題なく取得されますが、純粋な数値はとして取得されDBNullます。

の解き方?

次の接続文字列を使用してExcel2003ファイル(xls)を開きます。

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

2 に答える 2

6

あなたのシナリオに当てはまるドキュメントをMicrosoftのWebサイトで見つけました。すべての数値を文字列に変換することをお勧めします。

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

前に述べたように、ADOはExcelワークシートまたは範囲の各列のデータ型を推測する必要があります。(これはExcelセルの書式設定の影響を受けません。)同じ列に数値がテキスト値と混在している場合、深刻な問題が発生する可能性があります。JetとODBCプロバイダーはどちらもマジョリティタイプのデータを返しますが、マイノリティデータタイプの場合はNULL(空)値を返します。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.
于 2010-07-08T18:52:41.997 に答える
1

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

Excelドライバーは、最初の8行の値が数値型であるため、列が数値型であると見なします。

セルをテキスト(セルの書式設定)として定義しても、機能しません。

ドライバーに列を文字列として「表示」させるために、数値( '100344567)の前に引用符を付けるだけです。これにより、数値が文字列に変換されます。

この8行の値は、レジストリHKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel \-> TypeGuessRows=8で定義されています。

お役に立てば幸いです。

于 2010-12-09T15:00:39.860 に答える