2015-04-11 11 views
5

Ho un foglio di lavoro Excel con intestazioni di colonna e non desidero codificare la lettera o l'indice della colonna, quindi sto cercando di capire come renderlo dinamico. Sto cercando qualcosa di simile:In ClosedXML, è comunque necessario ottenere la lettera della colonna dal nome dell'intestazione della colonna?

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

fa ClosedXML sostenere qualcosa di simile alla funzione composta GetColumnLetter() di cui sopra, quindi non c'è bisogno di lettere di colonna codice duri?

risposta

6

Certo, ottenere la cella che si desidera utilizzare un predicato sulla raccolta CellsUsed sulla riga con le intestazioni, quindi restituire la lettera di colonna dalla colonna.

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

c'era un piccolo bug nel tuo bug di risposta l'ho risolto e contrassegnato come accettato – leora

+0

manca questo IXLTable come primo parametro – Emanuele