2017-05-12 24 views
0

如何使用Excel interop在Excel表格中查找行,而不必遍歷每一行?我;我喜歡使用foreach語句來循環使用我的集合,並且在其中存在employeeId和計費號碼,我想更新該員工的總小時數和該計算員工的總小時數。在foreach Excel interop中查找包含兩個值的行

這是我目前的代碼,但是人是它慢!

代替嵌套的for循環,我可以使用excel範圍來查找包含employeeId和計費編號的行嗎?

var lastLine = sheet.UsedRange.Rows.Count; 

foreach (var timeEntry in filteredList.OrderBy(x =>int.Parse(x.ChargeNumber.Split('.')[2], CultureInfo.CurrentCulture))) 
{ 
    for (var row = 3; row <= lastLine; row++) //loop over archive sheet 
    { 
     if (Convert.ToInt32(timeEntry.EmployeeId) == sheet.Cells[row, 1].Value2 && timeEntry.ChargeNumber == sheet.Cells[row, 5].Text.Trim()) 
     { 
      sheet.Cells[row, 6] = timeEntry.TotalHours; 

      if (timeEntry.TimeDifferential > 0) 
      { 
       sheet.Cells[row, 8] = "Add " + timeEntry.TimeDifferential.ToString(CultureInfo.CurrentCulture) + " from " + previousMonthYear; 
      } 
      else if (timeEntry.TimeDifferential < 0) 
      { 
       var normalTime = -(timeEntry.TimeDifferential); 

       sheet.Cells[row, 8] = "Subtract " + normalTime.ToString(CultureInfo.CurrentCulture) + " from " + previousMonthYear; 
      } 
      break; 
     } 
    } 
} 
+1

循環過的細胞是很慢的使用互操作由於RCW的。而是得到一個二維數組的單元格,並處理'object [,]'數組:array_http://stackoverflow.com/questions/356371/excel-interop-efficiency-and-performance –

回答

1

您可以使用Range.Find Method,這比循環效率高得多。

我也循環每排在我的Excel自動化項目之一,但它是太慢了,所以我用Range.Find

修改它按您的要求。

Range Find(
    Object What, 
    Object After, 
    Object LookIn, 
    Object LookAt, 
    Object SearchOrder, 
    XlSearchDirection SearchDirection, 
    Object MatchCase, 
    Object MatchByte, 
    Object SearchFormat 
) 

More info - See it here

Examples