1. 概述
在使用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
,日期会被转换为数字并显示为:
44898,9262857176
这种表示方式对人类来说难以阅读。接下来,我们将探讨如何通过格式化实现更好的可视化。
2. 创建自定义DataFormat
首先,我们需要创建一个新的CreationHelper
。使用CreationHelper
,我们可以创建一个具有特定Format
的新的DataFormat
。这个DataFormat
在内部存储,并由一个短标识符引用。我们需要将其添加到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工作簿支持的最大单元格样式数量为65,000个。因此,我们应该始终重用现有的单元格样式,并在可能的情况下应用于多个单元格。
3. 使用默认DataFormat
正如我们所学,Apache POI使用短标识符链接到不同的DataFormats
。Excel已经内置了许多预设的DataFormats
,我们可以通过直接调用它们的短标识符来使用:
cellStyle.setDataFormat((short) 14);
dateCell.setCellStyle(cellStyle);
然后,我们可以使用以下代码行获取DataFormat
的字符串表示:
cellStyle.getDataFormatString();
在我们的示例中,我们将得到:
m/d/yy
最常见的DataFormats
包括:
短值 | 格式 |
---|---|
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使用本地化的格式化显示。
4. 总结
正如我们所见,使用Apache POI设置日期格式既快速又简单,但也很重要,以确保在电子表格中以人类可读的方式呈现日期。下次我们在电子表格中处理日期时,应该尝试这样做。
完整的示例可在GitHub上找到。