8

データ型が混在しているExcelファイルをC#で読み取ろうとしています。以下は私の接続文字列です

var path = //xls location
var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;IMEX=1;'");

Extended Properties調査によると、接続文字列の完全なものは

Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text

ただし、接続文字列では、値がレジストリから直接取得されるため、TypeGuessRows=0 は意味がないことが通知されました。したがって、キーを手動で変更し、このプロパティを接続文字列から削除する必要があります。

関与した特定のレジストリキーは次のとおりです。

道:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel

鍵:

TypeGuessRows

元の値= 8、それを機能させるために= 0に変更します

これを行わないと、私がに追加するのがIMEX難しい場合でも機能しません。TypeGuessRows=0Extended Properties

ただし、私の会社ではレジストリ値の変更を(厳密に)禁止しています。私はこれを行う代替案を見つけるように言われました。

要するに:

レジストリキーを変更せずに混合データ型Excelファイルを読み取る方法はありますか(これは非常に一般的な方法です)?

さらなるトピック:

これを経験したことがありますか?TypeGuessRows=0レジストリキーを変更せずに接続文字列からのみ設定できる可能性はありますか(上記の前提をキャンセルします)。

うまくいかない場合OleDb

ほかに選択肢はありOleDbますか?

アドバイスや提案をいただければ幸いです。

よろしく

4

2 に答える 2

8

あなたができることは、Excelの最初の行にヘッダーを置くことを要求し、接続文字列をに設定することです

var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;HDR=No;IMEX=1;'");

ここで重要なのは、HDR = No(NO HEADER)を設定することですが、ヘッダーがあるため、各列は文字列(テキスト)として扱われ、各セル値に対して解析または検証を行うことができます。もちろん、最初の行にはヘッダー情報が含まれているため、スキップまたは削除する必要があります。

于 2012-09-13T17:58:21.603 に答える
2

使用する代わりに、ExcelDataReaderを使用することOleDbを知っています。それは大いに機能します!強くお勧めします!

于 2012-04-03T02:01:36.017 に答える