我需要使用HSSFWorkbook(.xlsx)生成带有日期值的Excel文件。我正在传递Date类生成的日期值,并且我正在使用createHelper.createDataFormat().getFormat("dd/MM/yyyy")
将格式添加到Excel单元格中作为dd/MM/yyyy,但在下载的Excel文件中,它以不同的格式显示。
通过日期为2023年4月19日星期三15:00:17 IST,我期待的格式为2023年4月19日,但我得到的图像中所示。
附上了代码片段
Workbook wb = new HSSFWorkbook();
CreationHelper createHelper = wb.getCreationHelper();
Sheet sheet = wb.createSheet("New Sheet");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("test");
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(
createHelper.createDataFormat().getFormat("dd/MM/yyyy"));
cell = row.createCell(1);
Date date = new Date();
System.out.println("Date :"+date);
cell.setCellValue(date);
cell.setCellStyle(cellStyle);
谢谢
1条答案
按热度按时间j9per5c41#
Excel数字格式
DD/MM/YYYY
表示具有在系统区域设置中定义的分隔符的日期格式DMY。对于您的系统,该分隔符似乎是连字符(减号)。换句话说,该格式代码中的/
并不表示斜杠,而是默认日期分隔符。查看控制面板-区域日期(短)中的分隔符是什么。这是默认的日期分隔符。
如果你想设置一个用户定义的格式,总是使用斜杠作为分隔符,那么你需要将斜杠标记为无意义的字符。这将是
DD\/MM\/YYYY
-反斜杠前或DD"/"MM"/"YYYY
-双引号中的斜杠。完整示例:
当涉及到有关此文档的问题时,有:
Number format codes
区域化:
Number formatting
但由于我们使用Apache POI而不是Excel GUI级别的文件存储级别,因此还需要了解以下内容:
Microsoft Office始终将en_US设置存储在文件中。区域化仅在GUI中完成。
因此,对于数字格式,这意味着:
文件中存储的数字格式
#,##0.00
在GUI中可以是#.##0,00
,该GUI使用区域设置,其中逗号是十进制分隔符,点是千位分隔符。文件中存储的日期格式
DD/MM/YYYY
在使用区域设置的GUI中可能是DD.MM.YYYY
,其中点是日期分隔符。在该区域语言中,当“Day”拼写“Tag”而“Year”拼写“Jahr”时,它也可能是TT.MM.JJJJ
。如果将
DD/MM/YYYY
放在一个没有斜线作为日期分隔符的GUI中,那么在文件存储中将存储DD\/MM\/YYYY
,以标记斜线为无意义的字符。但由于Apache POI直接写入文件存储,因此需要直接使用DD\/MM\/YYYY
。否则斜线表示默认的日期分隔符。