如何使用 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
)
更多信息 - 在此处查看
例子