在foreach Excel interop中查找包含两个值的行

我怎样才能findExcel表格使用Excel互操作,而不必循环每一行? 我想使用foreach语句来遍历我的集合,并且在employeeId和收费编号存在的位置,我想更新该员工的总小时数单元和费用编号。

这是我目前的代码,但是人是慢的!

代替嵌套的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; } } } 

你可以使用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 ) 

更多信息 – 请看这里

例子