2015-04-11 6 views
5

Ich habe ein Excel-Arbeitsblatt, das Spaltenüberschriften hat und ich möchte den Spaltenbuchstaben oder Index nicht hart codieren, also versuche ich herauszufinden, wie ich es dynamisch machen könnte. Ich bin auf der Suche nach so etwas wie folgt aus:Gibt es in ClosedXML sowieso den Spaltenbuchstaben vom Spaltenkopfnamen?

 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++; 
    } 

Does ClosedXML unterstützen so etwas wie die aus GetColumnLetter() Funktion oben, so habe ich nicht zu hart Code Spaltenbuchstaben?

Antwort

6

Sicher, holen Sie sich die Zelle, die Sie wollen mit einem Prädikat für die CellsUsed Sammlung in der Zeile mit den Überschriften, dann geben Sie den Spaltenbuchstaben aus der Spalte zurück.

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; 
} 
+2

Es gab einen kleineren Fehler in Ihrem Antwort Bug Ich habe es behoben und es als akzeptiert markiert – leora

+0

fehlt diese IXLTable als erster Parameter – Emanuele

Verwandte Themen