Epplus使用列名查找列

时间:2016-10-10 12:54:57

标签: c# datatable epplus

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

1-我从DataTable加载excel

var templateXls = new ExcelPackage();
        var sheet = templateXls.Workbook.Worksheets.Add(parameters.ReportName);

        sheet.Cells["A1"].LoadFromDataTable(myDataTable, true);

现在我如何格式化示例列名为" Birthdate"是短期的领域?列可以在任何索引中取决于用户选择,也有可能不生成列。 (如果用户没有包含它)

3 个答案:

答案 0 :(得分:11)

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

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 :(得分:6)

您可以通过这种方式提取第一行中单元格的值:

        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”

答案 2 :(得分:5)

也可以用一点{ "_id" : 10951, "quarter_values" : [ { "quarter" : [ 1473321600, 1473322500, 1473323400, 1473324300 ], "value" : [ 395, 402, 406, 410 ] } ] } 来做。所以基于你的代码片段(可能想要添加一些空引用检查):

linq