質問

私は、Excel 2000/2003ワークブックからデータを取得するために、OleDbConnectionオブジェクトのクラスを使用しています:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                          "Data Source=" + filename + ";" +
                          "Extended Properties=\"Excel 8.0;IMEX=1\";";

OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();

// code to get table name from schema omitted

var dataAdapter = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", name),connection);
var myDataSet = new DataSet();
dataAdapter.Fill(myDataSet, "ExcelInfo");

今では長さが255文字を超えるとワークシートのセルが切り捨てられていることが判明しました。これはMicrosoft.Jet.OLEDBプロバイダの制限である、または私はそれについて行うことができるものはありますか?

誰ですか?

役に立ちましたか?

解決

ExcelのOLEDBプロバイダは自動的にデータの最初の8行のオフに基づいてデータ型を決定しようとし、これは、HDR接続文字列に=はい/いいえプロパティで設定することができます。さらに、それが列をテキストに適用することができ、複数の種類があります。最初の8行のどれも持っていない場合は、それが誤ったデータ型を設定するようにメモ型は、255を超える文字を保持します。

ここで説明するようにこれを変更する方法は、TypeGuessRowsと呼ばれるレジストリ設定を変更することです:マイクロソフトのサポート

注:TypeGuessRowsキーに対する値の有効範囲は、値が0の場合は、非常に大きなファイルが最大の行があることを確認している場合は、スキャンしたソース行の数だから16384である、しかし、0〜16です。最初ます。

他のヒント

私はスタックを経由して掲載する href="https://stackoverflow.com/questions/3232281/oledb-mixed-excel-datatypes-missing-data/5721521#5721521"> OleDBAdapterエクセルQAこの

Iは、ワークシートのセル(行[0] [4])W / 445文字を移入し、それがうまく働きました... ouputをのためのコードの最後にこれを追加

// DataSet:          
Object row0Col3 = ds.Tables["xlsImport"].Rows[0][2];
Object row0Col4 = ds.Tables["xlsImport"].Rows[0][4];

string rowZeroColumn3 = row0Col3.ToString();
string rowZeroColumn4 = row0Col4.ToString();

Console.WriteLine("Row 0, Col 4 string length: {0} " + Environment.NewLine + "Excel content: {1}", rowZeroColumn4.Length, rowZeroColumn4);           
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top