2016-10-10 57 views
7

我有Excel表格動態創建,我想格式化一些列作爲日期,但我不知道這些列的索引事先我只知道標題標題。Epplus查找列使用列名

1 - 我從數據表

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

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

加載的Excel現在,我怎麼可以格式化例如列名爲「生日」是短日期字段?該列可以在任何索引中取決於用戶選擇,還有可能該列未生成。 (如果用戶不包括它)

回答

4

可以通過一些小linq也做到這一點。因此,基於關閉您的代碼段的(可能要添加一些空引用檢查):

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

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

你可以這樣提取第一行中的單元格的值:

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

然後你就可以繼續根據自己的興趣對其進行比較。

只需記住,不像列表和數組,行和列的索引從「1」開始,而不是「0」

7

您也可以使用這樣的extention方法:

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

,並使用它:

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

你確定[「1:1」]會檢查列號嗎?我想你想通過除1:1之外的其他東西。如果正確,那麼你能解釋什麼是1:1?謝謝 –