9

我有一个包含列标题的 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() 函数,因此我不必对列字母进行硬编码?

4

2 回答 2

11

当然,在带有标题的行上使用集合上的谓词来获取您想要的单元格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;
}
于 2015-04-11T06:50:04.497 回答
2

对于 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;
}
于 2021-01-05T15:41:33.247 回答