如果值在此行中并且 return 它如何获取行号

How to get the row number if value is in this row and return it

我不确定我问的问题是否正确。

基本上我想遍历所有行并检查 Cells[row, 5] 中的值是否 = nrNummer。如果是这样,我希望行号像 realrow 中的 30 和 return 它。我不知道如何 return 数字或者 "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)
                { int realrow = row;
                }

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

发生此错误是因为您在 if...

中声明了 int realrow

做这样的事情:

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 之外,这样你就可以 return 它。

编辑:

对于计算机开销的问题,return row if enter in if, if not return -1 (row is not founded.)

您不必等待 for 循环完成。如果我理解你的功能,一旦你找到了价值,你不必继续你的搜索,并且可以直接 return 这个价值,例如,而不是 :

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

你可以简单地:

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

最后,您可以直接 return -1 代替 return realrow 或其他任何东西,因为只有找不到搜索到的值时才会触发此 return。

更好的方法是在找到值后立即 return,而不是在 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
    }