C# Epplus使用列名查找列
我已经动态创建了excel工作表,我想将一些列格式化为日期,但是我事先不知道这些列的索引,我只知道标题 1-我从DataTable加载excelC# Epplus使用列名查找列,c#,datatable,epplus,C#,Datatable,Epplus,我已经动态创建了excel工作表,我想将一些列格式化为日期,但是我事先不知道这些列的索引,我只知道标题 1-我从DataTable加载excel var templateXls = new ExcelPackage(); var sheet = templateXls.Workbook.Worksheets.Add(parameters.ReportName); sheet.Cells["A1"].LoadFromDataTable(myDataTable, t
var templateXls = new ExcelPackage();
var sheet = templateXls.Workbook.Worksheets.Add(parameters.ReportName);
sheet.Cells["A1"].LoadFromDataTable(myDataTable, true);
现在,我如何将名为“Birthdate”的列格式化为短日期字段?该列可以位于任何索引中,具体取决于用户选择,也可能不生成该列。(如果用户不包括它)您可以通过以下方式提取第一行单元格的值:
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
}
}
}
使用(ExcelPackage package=newexcelpackage(newfileinfo(filePath)))
{
foreach(包.工作簿.工作表中的Excel工作表)
{
List ColumnNames=新列表();
对于(int i=1;i也可以使用一点linq
来完成。因此,根据您的代码片段(可能需要添加一些空引用检查):
您也可以使用如下扩展方法:
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");
您确定[“1:1”]会检查列号吗?我想您希望传递除1:1以外的其他内容。如果正确,请解释1:1是什么?谢谢这是ExcelRange地址,因此工作正常,并选择给定工作表的第一行
int columnId = ws.GetColumnByName("Birthdate");