2011-02-24 4 views
1

私はアドレスを含むExcelスプレッドシートを持っています。私はOLEDBを使ってスプレッドシートからデータを読んで、それをC#のDataTableに保存しています。oledbを使ってハイフンの郵便番号を読む方法

String connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + @";Extended Properties=""Excel 8.0;HDR=1;IMEX=1"""; 

問題点:DataSet Visualizerを使用すると、郵便番号フィールドに空の文字列が表示されます。

12345-1234 --> "" 

このように、この動作を修正して、郵便番号が表示されるようにします。私がハイフンの後に数字を切り取らなければならないなら、それはうまくいくでしょう。郵便番号が確実に読み取れるようにするにはどうすればよいですか?

答えて

1

Excelには、列の書式設定方法に関する独自の考えがあることがよくあります。たとえば、郵便番号が含まれている列がある場合はプラス、残りの場合はプラスの列がある場合は、その列の書式設定の仕方については大したことはありません。おそらく、ExcelはZip + 4で埋められていると仮定します。多分、5桁のZip、またはおそらく数字になるでしょう。私はこれらのファイルを何年も使ってきましたが、私はMicrosoftがこの決定を下す際に乱数ジェネレータを使用すると確信しています。あなたの元の質問については

は、このsiteによると、CONVERTはので、多分

SELECT CONVERT(BadField, SQL_CHAR) AS FixedField FROM [Table$] 

のようなものがうまくいくかもしれない、有効なSQLスカラー関数のですか?

私の最初の傾向は、スプレッドシートからデータを読み込むためにCOM(OleDbではなく)を使用することを提案することでした。私はあなたが各セルのフォーマットを読んでそれに応じて対処できるとはかなり確信していますが、私はCOM経由でExcelが難しく、ひ​​どく高速ではないと常に感じました。

+0

私は確かにあなたのコンバージョンの提案を試してみませんか?私はinteropの大きなファンではありませんが、私はそれを最終的に考慮する必要があります。このサイトにはODBC関数のリストがありますが、私はOLEDBを使用しています。違いがありますか? – MAW74656

+0

IMEX = 1と元のセルフォーマットを変更したことがトリックでしたが、あなたのポストから多くのことを学んだので、答えマーク – MAW74656

+0

私は忘れていましたが、ユーザーがExcelで指定したセルの書式設定は、ほとんどの場合、OleDbでのデータの表示方法には影響しません。 –