У меня есть этот метод, который принимает два строковых параметра и перебирает каждую строку на листе Excel, чтобы найти совпадение в двух столбцах. когда он находит совпадение, он возвращает номер строки, чтобы этот номер можно было использовать для определения (в другом методе), какую строку нужно ОБНОВИТЬ.
public int IterateRows(string f, string l)
{
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(locationAndNameOfExcelFile, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Microsoft.Office.Interop.Excel._Worksheet xlWorksheet = (Microsoft.Office.Interop.Excel._Worksheet)xlWorkbook.Sheets[1];
//Iterate the rows in the used range
foreach (Microsoft.Office.Interop.Excel.Range row in xlWorksheet.UsedRange.Rows)
{
var familyNameCellValue = row.Cells[row.Row, 2].Value2.ToString();
var firstNameCellValue = row.Cells[row.Row, 3].Value2.ToString();;
if (f == familyNameCellValue && firstNameCellValue == l)
{
return row.Row;
}
}
return -1;
}
Проблема в том, что при отладке каждой итерации foreach при наведении курсора на значения «row.Row» я замечаю, что они верны (например, НЕ пропуская строку Excel). Я точно знаю, думал, что значения для определенного значения ячейки должны быть чем-то другим. Кажется, перескочил на такое, что
- если "row.Row" имеет значение 2, оно имеет значение ячейки 3-й строки,
- если "row.Row" имеет значение 3, оно имеет значение ячейки 5-й строки,
- если "row.Row" имеет значение 4, оно имеет значение ячейки 7-й строки,
- если "row.Row" имеет значение 5, оно имеет значение ячейки 9-й строки,
- если "row.Row" имеет значение 6, оно имеет значение ячейки 11-й строки,
- и т. д., если строка, которую я ищу, является нечетным числом, она, очевидно, вернет «row.Row»
может кто-нибудь объяснить, почему он пропускает?