2

xlsx ファイルの読み取りに非常に奇妙な問題があります (私は OleDbDataReader を使用しています)。

次のデータで構成される列があります。

  • 50595855
  • 59528522
  • C_213154
  • 23141411

問題は、私がこのコラムを読んだときに、リーダーが 3 行目が空であることを示していることです。Excel の列形式は「一般」に設定されています。しかし、フォーマットを「テキスト」に設定すると、すべてが正常に機能し、リーダーにはその行のデータが表示されます。

実験のために、最初の 2 行の前に文字を付けて、次のようにしました。

  • C_50595855
  • C_59528522
  • C_213154
  • 23141411

また、列形式が「一般」に設定されている場合でも、リーダーは問題なくすべてを読み取ります。

そのため、Excel は明らかに列のデータを読み込む前に何らかの方法で分析し、列の最初のセルが数値のように見え、残りの一部がテキストであると混乱します。

セルにデータがあるか、ないかのどちらかなので、私には本当に奇妙です。

なぜこれが起こっているのか誰にも考えがありますか?

どんな助けでも大歓迎です。

よろしく、イゴール

4

1 に答える 1

4

ご想像のとおり、データ型が混在していることが原因の問題です。「OleDBDataReader 混合タイプ」で検索すると、いくつかの回答が得られます。問題を説明するMSDN ページは次のとおりです。

「この問題は、Excel ISAM ドライバーの制限が原因で発生します。Excel 列のデータ型が決定されると、その Excel 列に対して ISAM ドライバーが既定で設定したデータ型以外の値に対して Null が返されます。 Excel ISAM ドライバーは、最初の数行の実際の値を調べて Excel 列のデータ型を決定し、サンプリングで値の大部分を表すデータ型を選択します。」

...そして解決策:

「Excel のデータがテキストとして入力されていることを確認してください。Excel の列をテキストに再フォーマットするだけでは、これは達成されません。Excel の列を再フォーマットした後、既存の値を再入力する必要があります。Excel では、F5 を使用して既存の値を再入力できます。選択したセルの値。

オプション IMEX=1 を追加できます。OpenDatabase メソッドの Excel 接続文字列に。例えば:

Set Db = OpenDatabase("C:\Temp\Book1.xls", False, True, "Excel 8.0; HDR=NO; IMEX=1;")

"

于 2012-07-11T14:12:59.203 に答える