Epplus使用列名查找列
本文关键字:查找 Epplus | 更新日期: 2023-09-27 18:12:36
我有动态创建的excel表,我想格式化一些列作为日期,但我不知道这些列的索引提前,我只知道标题。
1-我从DataTable
加载excelvar templateXls = new ExcelPackage();
var sheet = templateXls.Workbook.Worksheets.Add(parameters.ReportName);
sheet.Cells["A1"].LoadFromDataTable(myDataTable, true);
现在我如何格式化例如列与名称"Birthdate"是短日期字段?该列可以在任何索引中,这取决于用户的选择,也有可能不生成该列。(如果用户没有包含)
您也可以像这样使用扩展方法:
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");
也可以用一点linq
。因此,根据您的代码片段(可能需要添加一些空引用检查):
var idx = sheet
.Cells["1:1"]
.First(c => c.Value.ToString() == "Birthdate")
.Start
.Column;
sheet.Column(idx).Style.Numberformat.Format = "mm-dd-yy";
您可以这样提取第一行单元格的值:
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"开始