在 ClosedXML 中,是否可以从列 header 名称中获取列字母?
In ClosedXML, is there anyway to get the column letter from column header name?
我有一个包含 headers 列的 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() 函数这样的东西,这样我就不必对列字母进行硬编码?
当然,使用 CellsUsed
collection 上的谓词获取您想要的单元格 headers,然后 return 列中的列字母.
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;
}
对于版本 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;
}
我有一个包含 headers 列的 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() 函数这样的东西,这样我就不必对列字母进行硬编码?
当然,使用 CellsUsed
collection 上的谓词获取您想要的单元格 headers,然后 return 列中的列字母.
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;
}
对于版本 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;
}