Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到Excel-仅接收来自sheet1最后一行的数据_C#_Excel_Linq_Linq To Excel - Fatal编程技术网

C# Linq到Excel-仅接收来自sheet1最后一行的数据

C# Linq到Excel-仅接收来自sheet1最后一行的数据,c#,excel,linq,linq-to-excel,C#,Excel,Linq,Linq To Excel,在经历了用ADO.NET查询Excel电子表格的痛苦之后,我决定试试 在我的项目中 我创建了一个方法,当我为它提供列a的对应值时(两者在同一行中),该方法应该返回列B的值。Sheet1有一个标题行或至少一行,指示a列和B列是什么 当我将代码与基本linq查询相结合以检索数据时,无论我请求列a中的值是什么,我都只从最后一行获取数据。总是最后一排。我的床单上大约有1159行。电子表格是Excel 2010,所以我想数据引擎应该是ACE 这是我的代码… public static string

在经历了用ADO.NET查询Excel电子表格的痛苦之后,我决定试试 在我的项目中

我创建了一个方法,当我为它提供列a的对应值时(两者在同一行中),该方法应该返回列B的值。Sheet1有一个标题行或至少一行,指示a列和B列是什么

当我将代码与基本linq查询相结合以检索数据时,无论我请求列a中的值是什么,我都只从最后一行获取数据。总是最后一排。我的床单上大约有1159行。电子表格是Excel 2010,所以我想数据引擎应该是ACE

这是我的代码…

    public static string ReturnDefinition(string remCode)
    {
        string strReturnMessage = "";
        string pathToExcelFile = @"MEDICARE.xlsx";
        string sheetName = "sheet1";

        var excelFile = new ExcelQueryFactory(pathToExcelFile);
        var codeDescriptions = from a in excelFile.Worksheet(sheetName) select a;

        try
        {
            foreach (var a in codeDescriptions)
            {
                if (a["Code"].ToString().Contains(remCode))
                {
                    strReturnMessage = a["Description"].ToString();
                }
                else
                {
                    strReturnMessage = "No Data";
                }
            }
            return strReturnMessage;

        }
        catch (Exception ex)
        {
            return "Error: " + ex.Message;
        }
        finally
        {

        }
    }
有什么想法吗

更新


我似乎没有在找到结果时返回结果。这与找到结果时不中断循环有关。每次循环都会继续到最后一个结果。

我想推荐另一个有用的包:


对我来说是最好的。如果您是您的,我没有过期期限。

当您找到您要查找的内容时,应立即返回值,否则它将继续循环,并且该值将是它找到的最后一个值或“无数据”:

strReturnMessage = a["Description"].ToString();
return strReturnMessage;

你不需要其他人;只有循环完成而未找到值时,才会返回“无数据”:


如果需要最后一个描述,其中代码包含搜索文本,则:

        strReturnMessage = a["Description"].ToString();
    } // end of if
} // end of loop

if (strReturnMessage == "") {
    return "No Data";
} else {
    return strReturnMessage;
}

是的,当您找到一个数据项时,您并没有跳出foreach循环,所以它一直运行到最后。smh,我应该知道。我会很快重新编写它,然后返回结果。这很可能是我的解决方案。在我修复代码后,我会在几分钟内回来。这个解决方案让我更接近我想要的。如果省略
返回strReturnMessage在循环之后,VS现在抛出“并非所有代码路径都返回值”。关于循环后可以返回的内容有什么建议吗?我在回答中添加了最后一行
return“No Data”。我当然会得到不同的结果,但不是总是得到最后一行,现在我只得到第二行(就在标题下面)。我更新了OPU中的代码,欢迎使用。它不是黑客,而是有效地利用LINQ。如果同时使用Last(),则可能根本不需要循环。我要说的是,返回结果的顺序并没有得到保证,尽管它们很可能会以电子表格的顺序返回。试一下LINQ,然后你可能会发布一个新问题。作为备用计划,我会研究一下这种可能性。我在搜索中看到了一个解决方案,但还没有尝试过。
        strReturnMessage = a["Description"].ToString();
    } // end of if
} // end of loop

if (strReturnMessage == "") {
    return "No Data";
} else {
    return strReturnMessage;
}