在 foreach Excel 互操作中查找包含两个值的行


如何使用 Excel

互操作在 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
)

更多信息 - 在此处查看

例子

最新更新