在ClosedXML中,无论如何都要从列标题名称中获取列字母?

时间:2015-04-11 06:18:23

标签: c# closedxml

我有一个excel工作表,其中包含列标题,我不想对列字母或索引进行硬编码,因此我想弄清楚如何使其动态化。我正在寻找这样的东西:

     var ws = wb.Worksheet("SheetName");

     var range = ws.RangeUsed();
     var table = range.AsTable();

     string colLetter = table.GetColumnLetter("ColHeader");

     foreach (var row in table.Rows())
     {
         if (i > 1)
         {
            string val = row.Cell(colLetter).Value.ToString();
         }
         i++;
    }

ClosedXML是否支持上面编写的GetColumnLetter()函数,所以我不需要硬编码列字母?

2 个答案:

答案 0 :(得分:7)

当然,使用带有标题的行上的CellsUsed集合上的谓词获取所需的单元格,然后从列中返回列字母。

public string GetColumnName(IXLTable table, string columnHeader)
{
    var cell = table.HeadersRow().CellsUsed(c => c.Value.ToString() == columnHeader).FirstOrDefault();
    if (cell != null)
    {
        return cell.WorksheetColumn().ColumnLetter();
    }
    return null;
}

答案 1 :(得分:0)

对于 0.95.4.0 版本,我做了以下步骤

var ws = wb.Worksheet("SheetName");

var range = ws.RangeUsed();
var table = range.AsTable();

var cell = table.FindColumn(c => c.FirstCell().Value.ToString() == yourColumnName);
if (cell != null)
{
     var columnLetter = cell.RangeAddress.FirstAddress.ColumnLetter;
}