Linq to Excel - 仅接收sheet1中最后一行的数据

时间:2014-06-02 15:23:56

标签: c# excel linq linq-to-excel

在尝试使用ADO.NET查询Excel电子表格后,我已经决定尝试Linq to 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
        {

        }
    }

任何想法?

更新

似乎我找不到结果。这与在找到结果时不会脱离循环有关。循环每次都继续到最后一次结果。

2 个答案:

答案 0 :(得分:1)

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

http://nugetmusthaves.com/Package/EPPlus

至于我最好的一个。在你的情况下,我没有经验。

答案 1 :(得分:1)

当你找到你要找的东西时,你应该直接返回值,否则它将继续循环,并且该值将是它找到的最后一个值或者没有数据&#39;:< / p>

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

你不需要别人;只有当循环完成而没有找到值时,才会返回&#34;无数据&#34;:

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

return "No Data";

如果您想要LAST描述,其中Code包含搜索文本,则:

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

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