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