C#を使用してExcelドキュメントをインポートするときに先頭のゼロが削除されないようにするにはどうすればよいですか
質問
Excel ファイルに問題なく接続して読み取ることができます。しかし、先頭にゼロがある郵便番号などのデータをインポートする場合、Excel がデータ型を推測し、その過程で先頭のゼロが削除されるのを防ぐにはどうすればよいでしょうか?
解決
自動検出ではなくテキストのインポートを強制するには、接続文字列にオプションを設定する必要があると思います。
Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=c:\path\to\myfile.xlsx;
Extended Properties=\"Excel 12.0 Xml;IMEX=1\";
マイレージは、インストールしたバージョンによって異なる場合があります。IMEX=1 拡張プロパティは、混合データをテキストとして扱うように Excel に指示します。
他のヒント
先頭に「」を付ける
セルの内容の前に ' を付けると、Excel ではセルの内容が数値ではなくテキストとして認識されます。Excelでは「」は表示されません。
型を判断するために列を読み取るときに、Excel に最初の 8 行以上を強制的に読み取る可能性があるレジストリ ハックがあります。
変化
HKLM\Software\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows
すべての行を読み取るには 0、その行数に設定するには別の数値を指定します。
これによってパフォーマンスがわずかに影響を受けるわけではありません。
これを行う方法は、列が「一般」ではなく「テキスト」としてフォーマットされるようにソース Excel ファイルをフォーマットすることだと思います。列全体を選択し、右クリックしてセルの書式設定を選択し、オプションのリストからテキストを選択します。
これは、列のコンテンツがテキストであり、そのように扱われる必要があることを明示的に定義することになると思います。
それがうまくいくかどうか教えてください。
ファイルをタブ区切りのテキスト ファイルとして保存することもうまく機能しました。
---残念ながら、ユーザーが定期的にデータを貼り付けるため、Excel Docの列に頼って特定の形式にとどまることはできません。列の特定のデータ型に依存している場合にアプリがクラッシュすることは望ましくありません。
' をプレフィックスとして付けると機能しますが、Excel ドキュメントにデータが既に存在する場合にプログラムでそれを行う合理的な方法はありますか?
価値を送信する 00022556
として '=" 00022556"'
SQLサーバーからのは、先行ゼロ問題を処理する優れた方法です
文字列の前に「 」を追加します。文字列が新しいタブに表示されます。