首页 > 解决方案 > 使用 ClosedXML 无法将 DateTime 导出到 Excel:dd/MM/yyyy HH:mm:ss 被截断为 dd/MM/yyyy

问题描述

我有一个 ASP.NET MVC Web 应用程序,我正在尝试使用 ClosedXML v0.87.0.0 将 DataTable 导出到 Excel 其中一个 DataTable 列的类型是 DateTime,它的格式为 dd/MM/yyyy HH:mm:ss . 将 DataTable 正确导出到 Excel 后,我使用 Excel 打开它,我看到 DateTime 列以 dd/MM/yyyy 格式显示。时间仿佛被忽略了。

我需要将 DateTime 字段作为 dd/MM/yyyy HH:mm:ss 导出到 Excel 中。我该怎么做?为什么 ClosedXML 忽略了时间部分?

下面的一些代码片段(假设 DataTable 'dt' 已经填充):

XLWorkbook workbook = new XLWorkbook();
IXLWorksheet workSheet = workbook.Worksheets.Add(dt, dt.TableName);

如上所示,我将整个 DataTable 'dt' 添加到 Excel 工作表中。我没有遍历所有 DataTable 行并一一添加它们。

我知道我可以循环遍历每个 DataTable 行并一一添加到 Excel 工作表中,并通过执行类似于以下代码片段的操作将正确的日期时间格式应用于 DateTime 列:

Using (XLWorkbook wb = new XLWorkbook())
{
    IXLWorksheet ws = wb.Worksheets.Add("worksheet");

    if (dt.Rows.Count > 0)
    {
        ws.Cell("A1").Value = dt.Columns[0].ColumnName;
        ws.Cell("B1").Value = dt.Columns[1].ColumnName;
        ws.Cell("C1").Value = dt.Columns[2].ColumnName;

        for (int i = 0; i < dt.Rows.Count - 1; i++)
        {
            ws.Cell(String.Format("A{0}", (i + 2))).Value = dt.Rows[i][0];
            ws.Cell(String.Format("B{0}", (i + 2))).Value = dt.Rows[i][1];
            ws.Cell(String.Format("C{0}", (i + 2))).Value = dt.Rows[i][2];
            ws.Cell(String.Format("C{0}", (i + 2))).Style.DateFormat.Format = "dd/MM/yyyy HH:mm:ss";
        }
    }
}

...但我想避免遍历所有 DataTable 行。我想立即将 DataTable 添加到工作表中,但是如何将 DateTime 列的正确格式指示为 ClosedXML?

标签: c#exceldatetimedatatablesclosedxml

解决方案


你可以使用 Epplus 包,我认为它更容易使用。您将使用的代码是:Answer - Export DataTable to Excel with EPPlus


推荐阅读