我有一个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?
您可以使用Epplus软件包,我认为它更易于使用。您将使用的代码是:Answer - Export DataTable to Excel with EPPlus