【问题标题】:In ClosedXML, is there anyway to get the column letter from column header name?在 ClosedXML 中,是否可以从列标题名称中获取列字母?
【发布时间】:2015-06-16 23:03:57
【问题描述】:

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

【问题讨论】:

    标签: c# closedxml


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      当然,在带有标题的行上使用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;
      }
      

      【讨论】:

      • 缺少这个 IXLTable 作为第一个参数
      • 我不明白这个例子,你能告诉我如何实现它吗?
      猜你喜欢
      • 2013-06-21
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多