使用XSL Writer API写入Excel无法得到正确dd.MM.yyyy日期格式
用户提问
我尝试向Excel单元格写入dd.MM.yyyy格式的日期,实现代码如下:
val dateFormat = new SimpleDateFormat("dd.MM.yyyy")随后我将下述值传入XSL Writer API:
dateFormat.parse("24.06.2020")但最终输出的XSL文件中日期显示为"24/06/2020",与预期格式不符,请问我哪里操作有误?
问题原因
dateFormat.parse()方法输出的是原生Date类型对象,该对象仅存储时间戳信息,本身不携带任何展示格式属性- 你定义的
SimpleDateFormat规则仅作用于「字符串转Date对象」的解析步骤,不会对后续XSL Writer API的日期渲染逻辑产生影响,API默认使用内置的dd/MM/yyyy格式输出日期,就会出现和预期不符的情况
解决方案
方案1:写入纯文本格式日期
直接传入格式化完成的字符串,不需要转成Date对象传入API:
val dateFormat = new SimpleDateFormat("dd.MM.yyyy") // 如果原始数据是Date类型,用format方法转成目标格式字符串传入API即可 val targetDateStr = dateFormat.format(yourDate) // 如果本身就是符合格式的字符串,可以直接传入API
注意:该方案写入的内容会被Excel识别为纯文本,无法直接参与日期类函数计算
方案2:写入可识别日期类型并自定义显示格式
保留传入Date对象的逻辑,额外给目标单元格设置自定义日期显示格式:
- 基于你使用的XSL Writer库创建自定义单元格样式,指定日期展示格式为
dd.MM.yyyy - 写入日期时将该样式绑定到对应单元格上,API渲染时就会按照指定格式展示
以常用的Apache POI库为例,核心实现逻辑如下:
// 创建自定义日期样式 val cellStyle = workbook.createCellStyle() val formatHelper = workbook.creationHelper cellStyle.dataFormat = formatHelper.createDataFormat().getFormat("dd.MM.yyyy") // 写入日期时绑定样式 cell.setCellValue(dateFormat.parse("24.06.2020")) cell.cellStyle = cellStyle
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

