Reputation: 1087
How can I find the row in an excel sheet using the Excel interop without having to loop over every row? I;d like to loop over my collection using a foreach statement and where the employeeId and charge number exist I would like to update the total hour count in total hour cell for that employee and charge number.
Here's my current code, but man is it slow!!
In place of the nested for loop could I use the excel range to find the row containing the employeeId and the charge number?
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;
}
}
}
Upvotes: 0
Views: 197
Reputation: 3968
You can use Range.Find Method
which is far more efficient than looping.
I was also looping each row in one of my excel automation project but it was too slow, so i used Range.Find
Modify it as per your requirement.
Range Find(
Object What,
Object After,
Object LookIn,
Object LookAt,
Object SearchOrder,
XlSearchDirection SearchDirection,
Object MatchCase,
Object MatchByte,
Object SearchFormat
)
Upvotes: 1