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 に答える