传递字符串对象时使用 apache poi 格式化日期

Posted

技术标签:

【中文标题】传递字符串对象时使用 apache poi 格式化日期【英文标题】:formatting dates using apache poi when passing a string object 【发布时间】:2021-02-28 16:53:22 【问题描述】:

我需要将 excel 中的日期单元格格式化为 dd/mm/yyyy

我很欣赏这可能不是“正确”的标准,但是,这正是客户想要的……

我传入单元格的日期格式为 yyyy-mm-dd

所以,

我有这个代码:

Cell dateCell;
dateCell = row.createCell(3);
dateCell.setCellValue(p.getDateOfBirth());
CellStyle dateCellStyle = WorkBook.createCellStyle();
dateCellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("dd/mm/yyyy"));
dateCell.setCellStyle(dateCellStyle);

根据这个: http://www.kscodes.com/java/writing-various-date-formats-in-excel-using-poi/ (1)

我相信应该可以。但是当我创建excel文件时,日期仍然是yyyy-mm-dd

我看过这里How to set date field in excel using java apache poi library?,我注意到这使用了这条线

cell.setCellType(CellType.NUMERIC);

但在 (1) 中没有提及这一点

有人知道我做错了什么吗?

【问题讨论】:

请看this。这符合您的需求吗? 谢谢马尔辛。我认为可能,但我的代码使用 XSSFWorkbook 并且提到的代码使用 HSSFCell 等。你知道两者是否兼容。我相信不同之处在于一个创建 excel.xls 文件,另一个创建 excel.xlsx 文件 【参考方案1】:

我传入单元格的日期格式为 yyyy-mm-dd

这是问题的根本原因。 API 期望您传递 Date 对象,而您正在传递 String 对象。您需要将日期字符串解析为Date 对象并将其传递给dateCell.setCellValue,如下所示:

Cell dateCell;
dateCell = row.createCell(3);
Date dateOfBirth = new SimpleDateFormat("yyyy-MM-dd").parse(p.getDateOfBirth() + "");
dateCell.setCellValue(dateOfBirth);
CellStyle dateCellStyle = WorkBook.createCellStyle();
dateCellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("dd/mm/yyyy"));
dateCell.setCellStyle(dateCellStyle);

【讨论】:

感谢您的帮助先生,尽管我使用 LocalDate 而不是 simpleDateFormat,但效果很好。我确定我在某处读到 simpleDateFormat 即将被弃用。不管怎样,你帮我见树不见林。

以上是关于传递字符串对象时使用 apache poi 格式化日期的主要内容,如果未能解决你的问题,请参考以下文章

基于Apache POI的Excel表格处理

Apache POI-HSSF 与 POI-XSSF

POI 的使用

Apache POI使用详解

4.Apache POI使用详解

java用poi读取excel文件时怎么获取每个单元格的列宽?