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 关注
- 118 浏览
添加回答
举报