Excel でセルを読み取る最速の方法を知りたいです。50000 行を含む Excel ファイルがあり、それをすばやく読み取る方法を知りたいです。最初の列を読むだけで、oledb 接続で 15 秒ほどかかります。もっと速い方法はありますか?
ありがとう
OLEDb プロバイダーを使用して 50000 レコードを読み取るためのコードを配置できますか。私はそれを試してみましたが、3列で50000レコードを読み取るのに4〜5秒かかりました。私は次のようにしました。ちょっと見てください、それはあなたを助けるかもしれません。:)
// txtPath.Text is the path to the excel file
string conString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + txtPath.Text + ";" + "Extended Properties=" + "\"" + "Excel 12.0;HDR=YES;" + "\"";
OleDbConnection oleCon = new OleDbConnection(conString);
OleDbCommand oleCmd = new OleDbCommand("SELECT field1, field2, field3 FROM [Sheet1$]", oleCon);
DataTable dt = new DataTable();
oleCon.Open();
dt.Load(oleCmd.ExecuteReader());
oleCon.Close();
ここにコードを入力していただければ、修正を試みることができます。:)
OLEDB には常に時間がかかります。
SQL Server 2005/2008 では高速になります。
OLEDB 接続の場合、1 秒あたり 7 レコードかかります。
SQLServer の場合、1 秒あたり 70 レコードかかります。
カンマ区切りのファイルを読み込む時間はさほどかかりませんが、データを挿入するのに時間がかかります。
私は文字通りこのことを経験しました。
ファイルから数字のリストを読みたいだけですか?Excelである必要がありますか?技術者以外の人がリストを更新していますか?単一の列からメモリ内のリストに50,000個の数値を読み取りたい場合は、セルをテキストファイルにコピーして、TextReaderで読み取ります。すぐになります。
List<string> ReadFile(string path)
{
TextReader tr = new StreamReader(path);
string line;
List<string> lines = new List<string>();
while((line=tr.ReadLine())!=null)
{
//if this was a CSV, you could string.split(',') here
lines.add(line);
}
return lines;
}
私は同じことに直面していて、オフィス開発センターで読みました:
Excel ファイルの操作には、次の 2 つの選択肢があります。
2つの間に大きな違いはありませんが、パフォーマンスが問題になる場合は、Open XML SDKを使用する必要があります.Open XML SDKは少し高速で、処理前に大きなファイルを開くのにそれほど時間を必要としません. 上記のリンクでも読むことができるので、引用します:
Office for Automation はサポートされていません。Office アプリケーションは、人間の監視なしで実行するように設計されておらず、「ハング」する厄介な傾向があります。
オープン xml SDK を学習するための良いスタートは、このリンクで提供されています: http://msdn.microsoft.com/en-us/library/office/gg575571.aspx