使用Apache POI设置日期格式

2025/04/12

1. 简介

当我们在Apache POI中处理日期时,我们希望确保它们的格式正确。

幸运的是,使用Apache POI设置日期格式很容易。在本教程中,我们将展示如何使用Apache POI将日期的自定义DataFormat定义为CellStyle,以及如何使用现有的DataFormats。

2. 起点

我们的起点将是一个新的XSSFWorkbook、一个XSSFCell和一个已经创建的CellStyle:

XSSFWorkbook wb = new XSSFWorkbook();
CellStyle cellStyle = wb.createCellStyle();
wb.createSheet();
XSSFSheet sheet = wb.getSheetAt(0);
XSSFCell dateCell = sheet.createRow(0).createCell(0);
dateCell.setCellValue(new Date());

由于我们尚未设置所需的DataFormat,因此我们的Date将被转换为数字并显示为:

44898,9262857176

这种表示方式对于人类来说可读性很差,因此,接下来我们将探讨如何通过格式化来创建更好的可视化效果。

3. 创建自定义数据格式

首先,我们需要创建一个新的CreationHelper;通过CreationHelper,我们可以创建一个具有特定Format的新DataFormat。此DataFormat存储在内部,并由一个short引用。我们需要将它添加到CellStyle本身,并将CellStyle应用于Cell:

CreationHelper createHelper = wb.getCreationHelper();
short format = createHelper.createDataFormat().getFormat("m.d.yy h:mm");
cellStyle.setDataFormat(format);
dateCell.setCellStyle(cellStyle);

设置此自定义CellStyle后,我们的日期将被格式化:

02.12.2022 21:30

但是,如果我们创建新的自定义DataFormat,则应始终记住Excel工作簿最多支持65000种单元格样式。因此,我们应该始终重用现有的单元格样式,并尽可能将其应用于多个单元格。

4. 使用默认数据格式

正如我们所了解的,Apache POI使用短代码链接到不同的DataFormat。Excel已经有很多内置DataFormat,我们可以通过它们的短代码直接调用它们:

cellStyle.setDataFormat((short) 14);
dateCell.setCellStyle(cellStyle);

之后,我们可以使用以下代码行以字符串表示形式获取DataFormat:

cellStyle.getDataFormatString();

在我们的示例中,我们将获得以下内容:

m/d/yy

最常见的数据格式是:

短值 格式
14 m/d/yy
15 d-mmm-yy
16 d-mmm
17 mmm-yy
18 h:mm AM/PM
19 h:mm:ss AM/PM
20 h:mm
21 h:mm:ss
22 m/d/yy h:mm

如果其中一种数据格式符合我们的需求,我们应该始终使用它,因为Excel会将其显示为其格式之一,而不是自定义格式;这也会触发Excel使用该格式的本地化可视化效果

5. 总结

可以看出,使用Apache POI设置日期格式既快捷又简单,而且对于以人性化的方式可视化日期也至关重要。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章