15

OleDbConnectionクラスを使用して、Excel2000/2003ブックからデータを取得しています。

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プロバイダーの制限ですか、それとも私にできることはありますか?

誰?

4

2 に答える 2

20

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

これを変更する方法は、ここで説明されているように、TypeGuessRowsと呼ばれるレジストリ設定を変更することです。Microsoftサポート

注:TypeGuessRowsキーの有効な値の範囲は0〜16です。ただし、値が0の場合、スキャンされるソース行の数は16384です。したがって、ファイルが非常に大きい場合は、最大の行が最初になるようにしてください。

于 2009-05-22T15:47:53.050 に答える
2

スタックオーバーフローを介して投稿したこのOleDBAdapterExcelQAを試してください。

ワークシートのセル(Rows [0] [4])に445文字を入力しましたが、正常に機能しました...これを出力のコードの最後に追加します

// 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);           
于 2011-05-03T20:01:27.517 に答える