使用ClosedXML不能将DateTime导出到Excel:dd / MM / yyyy HH:mm:ss被切成dd / MM / yyyy

问题描述 投票:0回答:1

我有一个ASP.NET MVC Web应用程序,我正在尝试使用ClosedXML v0.87.0.0将数据表导出到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格式应用于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# excel datetime datatables closedxml
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.