1 回答

TA貢獻1998條經驗 獲得超6個贊
25K 行是一個很小的行數。Excel 每張工作表最多可容納 100 萬行。
延遲是由 Excel Interop 的使用造成的,而不是數據大小造成的?;ゲ僮髡{用實際上是對單獨進程的 COM 調用。每個這樣的調用都比訪問本地對象慢數百倍。該行xlSheet2WorkSheetRange.Rows.Count
包含兩個跨進程調用,一個用于獲取對 Rows 集合的引用,另一個用于Count
從中獲取屬性。與 相同xlSheet1Range.Cells[iRow, 3]
。
您可以使用ADO.NET和 Jet OLEDB 提供程序或本機 .NET 庫(如ExcelDataReader )。本機 .NET 解決方案的優點是您無需在客戶端計算機上安裝任何內容。
您可以使用ExcelDataReader
將所有數據直接讀入數據集,每個工作表中的數據最終存儲在單獨的表中,例如:
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
? ? ? ? }
? ? }
}? ??
將這些行轉換為強類型對象的一種簡單方法是使用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 關注
- 162 瀏覽
添加回答
舉報