如何使用epplus遍历并读取excel中的列标题

时间:2014-09-02 17:30:59

标签: excel c#-4.0 epplus

我正在使用epplus读取excel文件,我想循环遍历每一行和每一列,并查找列标题以检查集合并读取匹配的单元格值。我是epplus的新手,找不到任何像这样的东西的参考。我在this link中查看了类似的问题,但是我没有循环列标题的东西。

有可能这样做吗?非常感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果要在Excel文件中找到与您指定的名称相匹配的列,可以使用此功能:

    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;
    }

它将返回列标题的地址。 您可以将其更改为将i作为列的索引返回。

答案 1 :(得分:1)

或者如果您更喜欢使用Linq的解决方案:

    /// <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查询检索每个列号,而无需重建列表每次搜索。

我在这里找到了使用IndexOf的建议:

Get List<> element position in c# using LINQ