如何使用epplus循环读取excel中的列标题

我使用epplus来读取一个excel文件,我想遍历每一行和每一列,并寻找列标题来检查一个集合,并读取单元格的值,如果匹配。 我是新来的epplus,找不到任何引用做这样的事情。 我已经查看了这个链接中的类似问题,但是我没有通过列标题循环的东西。

有这种可能吗? 任何帮助深表感谢。

谢谢!

如果要在Excel文件中find与指定名称相匹配的列,可以使用此function:

public string FindColumnAddress(ExcelWorksheet sheet, string columnName) { int totalRows = sheet.Dimension.End.Row; int totalCols = sheet.Dimension.End.Column; var range = sheet.Cells[1, 1, 1, totalCols]; for (int i = 1; i <= totalCols; i++) { if (range[1, i].Address != "" && range[1, i].Value != null && range[1, i].Value.ToString() == columnName) return range[1, i].Address; } return null; } 

它将返回列标题的地址。 你可以改变它作为列的索引返回我。

或者,如果您更喜欢使用Linq的解决scheme:

  /// <summary> /// Get 1 based column number of first column with 'columnName' as column header /// </summary> /// <param name="sheet"></param> /// <param name="columnName">Column name to find</param> /// <returns>1 based column number if found or null if column not found</returns> public int? FindColumnAddress(ExcelWorksheet sheet, string columnName) { int totalCols = sheet.Dimension.End.Column; var header = sheet.Cells[1, 1, 1, totalCols].ToList(); var idx = header.IndexOf(header.FirstOrDefault(hdritm => hdritm.Text == columnName)); return idx < 0 ? (int?)null : idx + 1; } 

注意:如果您要检索多个列标题位置,则可能需要生成“标题”列表,然后使用Linq查询检索每个列号,而不必为每个search重build列表。

我在这里findbuild议使用IndexOf:

使用LINQ在c#中获取List <>元素的位置