我所限定的本方法這需要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));
享受
確定並行處理將有助於在這裏?你分析了創建對象所需的時間嗎?瓶頸可能只是磁盤訪問。 – Gusdor
對於Excel性能檢查[this](http://stackoverflow.com/a/17021537/1069200)。我不認爲Parallel.Foreach會做任何事情。批量讀取,然後從內存中讀取imo。 –
所有你需要的是一個IEnumerable。你的Excel庫可能會給你。研究文檔。 –
usr