c# - 使用 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?
解决方案
你可以使用 Epplus 包,我认为它更容易使用。您将使用的代码是:Answer - Export DataTable to Excel with EPPlus
推荐阅读
- ios - 通过 vtable 调度比散列表更快,但如果在任何地方使用会消耗大量内存
- swift - 如果数据库中已存在用户,则拒绝创建用户
- php - 使用 PHP/Windows/MySQL 连接到 GDB(或 FDB)数据库文件
- javascript - 如何检查 URL 是否仅包含使用 javascript 的域?
- unit-testing - Roboletric 4.0.1 不断在 buildActivity 上抛出 Resources$NotFoundException
- javascript - three.js 用 3d '绳索' 连接两个移动的物体
- azure - 天蓝色嵌套模板依赖处理错误
- vue.js - Vue js vuelidate 无法读取动态验证模式中的自定义验证
- python - 在 RasPi 上使用 psutil(Python 模块)的问题
- node.js - 确保子文档的属性在猫鼬中具有唯一值