C# Epplus使用列名查找列

C# 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

我已经动态创建了excel工作表,我想将一些列格式化为日期,但是我事先不知道这些列的索引,我只知道标题

1-我从DataTable加载excel

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");