C# 使用ClosedXML:dd/MM/yyyyy将日期时间导出到Excel不起作用HH:MM:ss被截断为dd/MM/yyyy

C# 使用ClosedXML:dd/MM/yyyyy将日期时间导出到Excel不起作用HH:MM:ss被截断为dd/MM/yyyy,c#,excel,datetime,datatables,closedxml,C#,Excel,Datetime,Datatables,Closedxml,我有一个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忽略

我有一个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忽略了时间部分

下面是一些代码片段(假设数据表“dt”已填充):

如上所述,我将整个数据表“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";
        }
    }
}
使用(XLWorkbook wb=new XLWorkbook())
{
IXL工作表ws=wb.Worksheets.Add(“工作表”);
如果(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;
对于(int i=0;i

。。。但我希望避免循环遍历所有DataTable行。我想立即将DataTable添加到工作表中,但如何才能指示DateTime列的正确格式以关闭DXML?

您可以使用Epplus软件包,我认为它更易于使用。您将使用的代码是:

请注意,
mm
的时间是几分钟,而
mm
的时间是几个月。自定义日期和时间格式说明符区分大小写。@SonerGönül谢谢。我已经改正了。
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";
        }
    }
}