Epplus 使用列名查找列
Epplus find column using column name
我动态创建了 excel sheet,我想将一些列格式化为日期,但是我事先不知道这些列的索引,我只知道 header 标题.
1- 我从 DataTable
加载 excel
var templateXls = new ExcelPackage();
var sheet = templateXls.Workbook.Worksheets.Add(parameters.ReportName);
sheet.Cells["A1"].LoadFromDataTable(myDataTable, true);
现在如何将名称为 "Birthdate" 的列格式化为 short-date 字段?该列可以在任何索引中,具体取决于用户的选择,也有可能不会生成该列。 (如果用户不包含它)
您可以这样提取第一行中单元格的值:
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”开始
稍微 linq
也可以做到。因此,基于您的代码片段(可能需要添加一些空引用检查):
var idx = sheet
.Cells["1:1"]
.First(c => c.Value.ToString() == "Birthdate")
.Start
.Column;
sheet.Column(idx).Style.Numberformat.Format = "mm-dd-yy";
您也可以像这样使用扩展方法:
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");
我动态创建了 excel sheet,我想将一些列格式化为日期,但是我事先不知道这些列的索引,我只知道 header 标题.
1- 我从 DataTable
加载 excelvar templateXls = new ExcelPackage();
var sheet = templateXls.Workbook.Worksheets.Add(parameters.ReportName);
sheet.Cells["A1"].LoadFromDataTable(myDataTable, true);
现在如何将名称为 "Birthdate" 的列格式化为 short-date 字段?该列可以在任何索引中,具体取决于用户的选择,也有可能不会生成该列。 (如果用户不包含它)
您可以这样提取第一行中单元格的值:
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”开始
稍微 linq
也可以做到。因此,基于您的代码片段(可能需要添加一些空引用检查):
var idx = sheet
.Cells["1:1"]
.First(c => c.Value.ToString() == "Birthdate")
.Start
.Column;
sheet.Column(idx).Style.Numberformat.Format = "mm-dd-yy";
您也可以像这样使用扩展方法:
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");