Epplus使用列名查找列

我有动态创建的Excel表格,我想格式化一些列作为日期,但我不知道这些列的索引提前我只知道标题标题。

1-我从DataTable加载excel

var templateXls = new ExcelPackage(); var sheet = templateXls.Workbook.Worksheets.Add(parameters.ReportName); sheet.Cells["A1"].LoadFromDataTable(myDataTable, true); 

现在我如何格式化名为“Birthdate”的示例列为短日期字段? 列可以在任何索引中取决于用户选择,也有可能不生成列。 (如果用户不包含它)

也可以用一点linq来做。 所以基于你的代码片段(可能想要添加一些空引用检查):

 var idx = sheet .Cells["1:1"] .First(c => c.Value.ToString() == "Birthdate") .Start .Column; sheet.Column(idx).Style.Numberformat.Format = "mm-dd-yy"; 

你也可以像这样使用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"); 

您可以通过以下方式提取第一行中单元格的值:

  using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath))) { foreach (ExcelWorksheet worksheet in package.Workbook.Worksheets) { List ColumnNames = new List(); 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”