Epplus使用列名查找列

本文关键字:查找 Epplus | 更新日期: 2023-09-27 18:12:36

我有动态创建的excel表,我想格式化一些列作为日期,但我不知道这些列的索引提前,我只知道标题。

1-我从DataTable

加载excel
var templateXls = new ExcelPackage();
        var sheet = templateXls.Workbook.Worksheets.Add(parameters.ReportName);
        sheet.Cells["A1"].LoadFromDataTable(myDataTable, true);

现在我如何格式化例如列与名称"Birthdate"是短日期字段?该列可以在任何索引中,这取决于用户的选择,也有可能不生成该列。(如果用户没有包含)

Epplus使用列名查找列

您也可以像这样使用扩展方法:

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"开始