1 回答

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
25K 行是一個(gè)很小的行數(shù)。Excel 每張工作表最多可容納 100 萬行。
延遲是由 Excel Interop 的使用造成的,而不是數(shù)據(jù)大小造成的?;ゲ僮髡{(diào)用實(shí)際上是對(duì)單獨(dú)進(jìn)程的 COM 調(diào)用。每個(gè)這樣的調(diào)用都比訪問本地對(duì)象慢數(shù)百倍。該行xlSheet2WorkSheetRange.Rows.Count
包含兩個(gè)跨進(jìn)程調(diào)用,一個(gè)用于獲取對(duì) Rows 集合的引用,另一個(gè)用于Count
從中獲取屬性。與 相同xlSheet1Range.Cells[iRow, 3]
。
您可以使用ADO.NET和 Jet OLEDB 提供程序或本機(jī) .NET 庫(如ExcelDataReader )。本機(jī) .NET 解決方案的優(yōu)點(diǎn)是您無需在客戶端計(jì)算機(jī)上安裝任何內(nèi)容。
您可以使用ExcelDataReader
將所有數(shù)據(jù)直接讀入數(shù)據(jù)集,每個(gè)工作表中的數(shù)據(jù)最終存儲(chǔ)在單獨(dú)的表中,例如:
using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
? ? using (var reader = ExcelReaderFactory.CreateReader(stream))
? ? {
? ? ? ? var result = reader.AsDataSet();
? ? ? ? var table1=result.Tables["Sheet1"];
? ? ? ? foreach(DataRow in table1.Rows)
? ? ? ? {
? ? ? ? ? ?//Do something with the row
? ? ? ? }
? ? }
}? ??
將這些行轉(zhuǎn)換為強(qiáng)類型對(duì)象的一種簡單方法是使用LINQ To Dataset:
var query1 = from row in table1.AsEnumerable()
? ? ? ? ? ? select new ImportSheet1
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Info = row.Field<string>(0),
? ? ? ? ? ? ? ? ID? ?= row.Field<int?>(1)??0,
? ? ? ? ? ? ? ? InfoDesc = row.Field<int?>(2)??0,
? ? ? ? ? ? ? ? DataType = row.Field<string>(3),
? ? ? ? ? ? ? ? RateFormat = row.Field<string>(4)? ??
? ? ? ? ? ? };
var Sheet1CombinedList =query.ToList();
- 1 回答
- 0 關(guān)注
- 156 瀏覽
添加回答
舉報(bào)