【问题标题】:Epplus find column using column nameEpplus 使用列名查找列
【发布时间】:2016-10-10 12:54:57
【问题描述】:

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

1- 我从 DataTable 加载 excel

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

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

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

【问题讨论】:

    标签: c# datatable epplus


    【解决方案1】:

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

    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 地址,因此可以正常工作并选择给定工作表的第一行
    【解决方案2】:

    也可以用一点linq 来完成。所以基于你的代码 sn-p (可能想要添加一些空引用检查):

    var idx = sheet
        .Cells["1:1"]
        .First(c => c.Value.ToString() == "Birthdate")
        .Start
        .Column;
    
    sheet.Column(idx).Style.Numberformat.Format = "mm-dd-yy";
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-20
        • 2016-05-20
        • 1970-01-01
        • 1970-01-01
        • 2015-04-26
        • 1970-01-01
        相关资源
        最近更新 更多