我有一个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()函数,所以我不需要硬编码列字母?
答案 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;
}