2016-10-10 50 views
7

Mam arkusz Excel utworzony dynamicznie, chciałbym sformatować niektóre kolumny jako datę jednak nie wiem indeks tych kolumn z góry znam tylko tytuł nagłówka.Epplus znajdź kolumnę przy użyciu nazwy kolumny

1- załadować Excel z DataTable

var templateXls = new ExcelPackage(); 
     var sheet = templateXls.Workbook.Worksheets.Add(parameters.ReportName); 

     sheet.Cells["A1"].LoadFromDataTable(myDataTable, true); 

Teraz jak mogę sformatować np kolumnie o nazwie „Data urodzenia” być krótki pole daty? kolumna może być w dowolnym indeksie zależy od wyboru użytkownika, istnieje również możliwość, że kolumna nie zostanie wygenerowana. (Jeśli użytkownik nie obejmuje go)

Odpowiedz

4

może to zrobić przy odrobinie linq także. Więc oparte off fragmencie kodu (może chcieć dodać kilka czeków null odniesienia):

var idx = sheet 
    .Cells["1:1"] 
    .First(c => c.Value.ToString() == "Birthdate") 
    .Start 
    .Column; 

sheet.Column(idx).Style.Numberformat.Format = "mm-dd-yy"; 
5

Można wyodrębnić wartości komórek w pierwszym rzędzie w ten sposób:

 using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath))) 
     { 
      foreach (ExcelWorksheet worksheet in package.Workbook.Worksheets) 
      { 
       List<string> ColumnNames = new List<string>(); 
       for(int i = 1; i <= worksheet.Dimension.End.Column; i++) 
       { 
        ColumnNames.Add(worksheet.Cells[1, i].Value.ToString()); // 1 = First Row, i = Column Number 
       } 
      } 
     } 

Następnie można przystąpić do porównania ich zgodnie z własnymi zainteresowaniami.

Wystarczy pamiętać, że w przeciwieństwie do list i tablic, indeksy wierszy i kolumn zaczynają się od „1” zamiast „0”

7

Możesz również skorzystać z rozszerzeniem metody takie jak to:

public static class EpPlusExtensionMethods 
{ 
    public static int GetColumnByName(this ExcelWorksheet ws, string columnName) 
    { 
     if (ws == null) throw new ArgumentNullException(nameof(ws)); 
     return ws.Cells["1:1"].First(c => c.Value.ToString() == columnName).Start.Column; 
    } 
} 

i używać go:

int columnId = ws.GetColumnByName("Birthdate"); 
+0

jesteś pewien, że ["1: 1"] sprawdzi numer kolumny? Myślę, że chcesz przekazać coś innego niż 1: 1. Jeśli to prawda, czy mógłbyś wyjaśnić, co jest 1: 1? Dziękuję Ci –

Powiązane problemy