1

次のコードを使用して、ワークシート上のデータの Excel セットを C# dataTable に変換しています。

 var connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + _filename + ";Extended Properties=\"Excel 12.0;HDR=YES\";");
        var adapter = new OleDbDataAdapter("SELECT * FROM [owssvr$]", connection);
        connection.Open();
        var ds = new DataSet();
        adapter.Fill(ds);
        connection.Close();
        return ds.Tables[0];

これはうまくいくようですが、dataTable をループして値を抽出すると、約 400 文字のフィールドが 1 つあり、データテーブルからそれを取得すると、最初の 255 文字しか表示されません。

この文字制限なしでこれを Excel からインポートする方法はありますか?

4

2 に答える 2

1

わかった。座っていますか?

私はあなたが気に入らないことをあなたに伝えようとしています。

これを修正するには、レジストリを編集する必要があります。そして、私が読んだことから、新しい非Jetドライバーを使用している場合でも、これを行う必要があります. はい、ひどいです。いいえ、なぜ彼らがこのように設計したのかわかりません。これは、過去の多くのユースケースで私を悩ませてきました。

IMO の唯一の本当の解決策は、このドライバーをまったく使用せず、代わりに XLSX ファイルを使用することです。XLSX ファイルは、ZIP パッケージにラップされ、XLSX 拡張子で名前が変更された XML ファイルです。これらのファイルのいずれかが与えられた場合、Office Open XMLを使用してそれを読み取って操作するか、SharpZibLib を使用してパッケージを解凍し、関連するデータ ファイルを見つけて XML として読み取ることができます。それかどうか。

于 2010-08-08T11:26:44.163 に答える
0

え、まだ座ってるの?だから座っていてください!

残念ながら、Dave は正しいですが、私はさらに進んで、OLEDB を取り除き、堅牢なサードパーティ コンポーネントに置き換えます。Spire.XLSをお勧めします。さまざまなシナリオでテストされ、最も便利で信頼できるシナリオであることがわかりました。

これが役に立ったことを願っています

于 2010-08-08T11:55:39.793 に答える