我正在编写一个c#应用程序,它读取Excel文件并针对Excel工作表中的每一行创建内存中的对象。我已使用for-loop
成功完成此操作,但由于Excel文件包含超过90,000条记录,因此希望使用Parallel.Foreach
来提高性能。
我之前在Parallel.Foreach
个对象上使用了DataTable
,有什么方法可以在Excel.Range
对象上使用它吗?我需要逐行迭代excel数据。
任何例子都会有所帮助。
答案 0 :(得分:0)
我定义了这个方法,它使用Excel.Range对象并使用PLINQ将其转换为列表
private List<List<String>> ExcelRangeToLists(Excel.Range cells)
{
return cells.Rows.Cast<Excel.Range>().AsParallel().Select(row =>
{
return row.Cells.Cast<Excel.Range>().Select(cell =>
{
var cellContent = cell.Value2;
return (cellContent == null) ? String.Empty : cellContent.ToString();
}).Cast<string>().ToList();
}).ToList();
});
然后,只需从excel表中读取一些范围并调用此方法
var cells = xlSheet.get_Range("A3", "BK1555");
var data = ExcelRangeToLists(cells);
测量性能,它更好但不是很大 - 例如,1400行范围的速度提高约20%(对于较大的设置应该更好)。
我没有使用Parallel.Foreach,因为我需要select来创建列表,但基本的铸造思路是相似的。
Parallel.ForEach(cells.Rows.Cast<Excel.Range>(), row => DoSomethingWithRow(row));
享受