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”