【问题标题】:POI created excel file, date delimiter changed based on client date formatPOI 创建 excel 文件,日期分隔符根据客户日期格式更改
【发布时间】:2020-09-26 18:51:55
【问题描述】:

使用poi-ooxml 包创建工作簿并将日期单元格样式/格式设置为mm/dd/yyyy 后,打开它时显示为mm-dd-yyyy 格式。但是,当我将系统的短日期格式更改为“yyyy/mm/dd”时,单元格将正确显示为所需的格式 - mm/dd/yyyy。所以我想知道如何将单元格格式设置为mm/dd/yyyy,使用/作为分隔符,并且不被客户端机器区分?

设置单元格样式的代码

val dateCell = row.createCell(2);
// dateOccurred is LocalDate type
val date = DateUtil.getExcelDate(record.getDateOccurred()); 
dateCell.setCellValue(date);
val cellStyle = wb.createCellStyle();
val format = wb.createDataFormat();
cellStyle.setDataFormat(format.getFormat("mm/dd/yyyy"));

【问题讨论】:

  • 你用什么代码设置样式?
  • @Gagravarr 我附上了设置单元格样式的代码。如果您需要更多上下文,请告诉我

标签: excel apache-poi


【解决方案1】:

Excel 的默认日期分隔符由客户端系统设置确定。而Excel 数字格式mm/dd/yyyy 表示:两位数月份,后跟默认日期分隔符,后跟两位数日,后跟默认日期分隔符,后跟四位数年份。所以默认日期分隔符的斜杠被系统默认的日期分隔符替换是正常的。

您可以通过在日期部分之间使用文本 / 而不是默认的日期分隔符斜杠来避免这种情况。要将具有特殊含义的字符标记为Excel数字格式的文本,可以在字符前加上反斜杠\

所以

cellStyle.setDataFormat(format.getFormat("mm\\/dd\\/yyyy"));

将始终使用斜杠作为日期部分之间的文本/ 格式化日期,与客户端的设置无关。

【讨论】:

  • 这种格式很好用!我是如此接近这个,不知道为什么我没有尝试这种模式。非常感谢!我猜 Excel 将/ '翻译'为short date delimiter 但不知道如何验证这个想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
相关资源
最近更新 更多