EPPlus 没有格式化最后一条记录

EPPlus not formatting last record

我正在使用下面的帮助程序将数据从我们的网站导出到一个简单的 Excel 电子表格中。我使用 CreateAndFormateWorksheet 方法...创建并格式化工作表,以便保留所有 datetime 数据类型以及前导零。

效果很好,但格式设置未应用于电子表格的最后一行。

我已经做了一些研究,但找不到关于该主题的任何内容,所以我想我一定是设置不当或使用不当。有任何想法吗?

    public static void ExportData<T>(HttpResponseBase Response, List<T> dataSet, string filename)
    {
        var pck = new OfficeOpenXml.ExcelPackage();
        var ws = CreateAndFormatWorksheet(pck, dataSet);

        Response.Clear();
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        Response.AddHeader("content-disposition", "attachment;  filename=" + filename + ".xlsx");
        Response.BinaryWrite(pck.GetAsByteArray());
        Response.Flush();
        Response.End();
    }

    private static ExcelWorksheet CreateAndFormatWorksheet<T>(OfficeOpenXml.ExcelPackage pck, List<T> dataSet)
    {
        ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Monet_Export_" + DateTime.Now.ToString());
        ws.Cells["A1"].LoadFromCollection(dataSet, true);

        dynamic first = dataSet[0];
        string rowCount = dataSet.Count.ToString();

        int i = 0;
        foreach (PropertyInfo info in typeof(T).GetProperties())
        {
            string column = columnIndex[i];
            string indexer = column + "2:" + column + rowCount;
            if (info.PropertyType == typeof(DateTime))
            {
                ws.Cells[indexer].Style.Numberformat.Format = "mm/dd/yyyy";
            }
            else
            {
                // Treat any other column as text to preserve leading 0's
                ws.Cells[indexer].Style.Numberformat.Format = "@";
            }
            i++;
        }

        return ws;
    }

这是电子表格的屏幕截图。请注意 datetime 列的前两行格式正确,最后两行格式错误。

请记住,对于 .LoadFromCollection(dataSet, true);true 布尔值告诉它包含一个 header 行,这使得 table height = rowcount + 1 for the header 行。所以只需更改它:

//+1 for the header line
string rowCount = (dataSet.Count + 1).ToString();