传递字符串对象时使用 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 格式化日期的主要内容,如果未能解决你的问题,请参考以下文章