Parallel.Foreach on Excel.Range c#

时间:2013-12-23 07:56:45

标签: c# .net-4.5

我正在编写一个c#应用程序,它读取Excel文件并针对Excel工作表中的每一行创建内存中的对象。我已使用for-loop成功完成此操作,但由于Excel文件包含超过90,000条记录,因此希望使用Parallel.Foreach来提高性能。

我之前在Parallel.Foreach个对象上使用了DataTable,有什么方法可以在Excel.Range对象上使用它吗?我需要逐行迭代excel数据。

任何例子都会有所帮助。

1 个答案:

答案 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));

享受