Как получить номер строки, если значение находится в этой строке, и вернуть его - PullRequest
0 голосов
/ 20 марта 2019

Я не уверен, что задал правильный вопрос.

По сути, я хочу просмотреть все строки и проверить, есть ли значение в ячейках [row, 5] = nrNummer. Если это так, я хочу получить номер строки, например, 30, и вернуть его. Я не знаю, как вернуть номер или, если «для» это неправильный подход. Ниже мой код. Может кто знает как это сделать

private static int GetRowExcel(string projectName)
    {
        using (MemoryStream stream = new MemoryStream(bin))
        using (ExcelPackage excelPackage = new ExcelPackage(stream))
        {
            var ws = excelPackage.Workbook.Worksheets["Work"];

            string nrNummer = projectName.Split(' ').First();
            for (int row = 5; ws.Cells[row, 5].Value != null; row++)
            {
               if(ws.Cells[row, 5].Value.ToString()==nrNummer)
                { int realrow = row;
                }

            }
        }
        return realrow; //The name'realrow' does not exist in the current context
    }

Ответы [ 3 ]

1 голос
/ 20 марта 2019

Вам не нужно ждать окончания цикла. Если я понимаю вашу функцию, после того как вы нашли значение, вам не нужно продолжать поиск, и вы можете напрямую вернуть значение, например, вместо:

if(ws.Cells[row, 5].Value.ToString()==nrNummer)
{
    int realrow = row;
}

Вы можете просто:

if(ws.Cells[row, 5].Value.ToString()==nrNummer)
{
    return row;
}

И, наконец, вместо return realrow вы можете использовать return -1 или что-то еще, поскольку этот возврат будет срабатывать только в том случае, если искомое значение не найдено.

0 голосов
/ 20 марта 2019

Лучше всего вернуться сразу после того, как вы нашли свое значение, и не выполнять дальнейшие итерации в цикле for:

private static int GetRowExcel(string projectName)
    {
        using (MemoryStream stream = new MemoryStream(bin))
        using (ExcelPackage excelPackage = new ExcelPackage(stream))
        {
            var ws = excelPackage.Workbook.Worksheets["Work"];

            string nrNummer = projectName.Split(' ').First();
            for (int row = 5; ws.Cells[row, 5].Value != null; row++)
            {
               if(ws.Cells[row, 5].Value.ToString()==nrNummer)
                { 
                    return row;
                }

            }
        }
        return -1;  // return any value that shows that row is not found
    }
0 голосов
/ 20 марта 2019
return realrow; //The name'realrow' does not exist in the current context

Эта ошибка возникает потому, что вы объявляете int realrow внутри if ...

Сделайте что-то вроде этого:

private static int GetRowExcel(string projectName)
    {
        using (MemoryStream stream = new MemoryStream(bin))
        using (ExcelPackage excelPackage = new ExcelPackage(stream))
        {
            var ws = excelPackage.Workbook.Worksheets["Work"];

            string nrNummer = projectName.Split(' ').First();
            for (int row = 5; ws.Cells[row, 5].Value != null; row++)
            {
               if(ws.Cells[row, 5].Value.ToString()==nrNummer)
                { return row;
                }

            }
        }
        return -1; //The name'realrow' does not exist in the current context
    }

Я только что объявил int realrow = 0; вне if, таким образом вы можете вернуть его.

EDIT:

В случае проблем с загрузкой компьютера, вернуть строку, если введите, если, если не вернуть -1 (строка не была найдена.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...