2011-09-14 10 views
1

私はOLEDBを使用してExcelファイルを読み込もうとしました。 整数を正しく読むことができますが、テキストを読みたいときに問題が発生します。C#の問題がExcelからテキストを読み取る

IMEX = 1でも試しましたが、うまくいきませんでした。ここで

は私のサンプルコードです:

connectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='Excel 8.0;IMEX=1;HDR=Yes'"); 

adapter = new OleDbDataAdapter("SELECT * FROM [" + sheet + "$]", connectionString); 

DataSet data= new DataSet(); 
adapter.Fill(data); 
+1

エラーコード:もしそうなら、それは何ですか? –

+0

は空の文字列を返します。 – ShirazITCo

答えて

0

私はIMEX = 1を設定するIMEX = 1

を設定する前に、この問題が発生したhaventはもののこれは役立つかもしれないインポートモードを使用するようにドライバに指示します。この状態では、レジストリ設定ImportMixedTypes = Textが通知されます。これにより、混合データがテキストに変換されます。これが確実に機能するには、TypeGuessRows = 8のレジストリ設定を変更する必要があります。 ISAMドライバは、デフォルトで最初の8行を調べ、そのサンプリングからデータ型を決定します。この8行のサンプリングがすべて数値の場合、IMEX = 1を設定してもデフォルトのデータ型はTextに変換されません。それは数値のままです。

IMEX = 1が無差別に使用されないように注意する必要があります。これはIMPORTモードです。このモードでデータの追加や更新を実行しようとすると、結果が予測できない場合があります。

IMEXの可能な設定は次のとおり 0エクスポートモード 1インポートモード 2モード(フル更新機能)連結されている

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

+0

どのように私はレジストリを編集せずに混合タイプを設定できますか? – ShirazITCo

0

使用

connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + @";Extended Properties=""Excel 8.0;IMEX=1;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text"""; 

このすべき読んでいるときには助けますが、書きたい場合は注意してください。IMEX = 1は、これがインポートモードであり、この設定で書き込むと、予測できない結果が生じることを示しています。

-1

5枚のダミー行をExcelシートの最初の5行に挿入してみてください。 このようにして、連続する行はすべて文字列として識別されます。データ型変換をさらに行うことができます。 次に、コード上の5つのダミー行を削除します。

+0

これはうまくいかないかもしれませんが、私の推測によれば、OPは最初に手動で編集する必要はなく、プログラムでExcelファイルを読み込めるようにしたいと考えています。 – tomsv

+0

私は理解しています、それはExcel地獄です。私は最近それに入っていた。私は基本的に私のxlsxを変換しなければならなかった。 SSISが正しく読むことができるように、タブ区切りのテキストに変換します。ダミーの行を追加する(できれば)ハンサムな解決策ではありませんが、動作します。 – mischievous

0

.XLSXを読んでいるときに私は同様の問題がありました。ここでは接続文字列で提供したものです。

connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + @";Extended Properties=""Excel 12.0;IMEX=1;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text""";

関連する問題