You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apache POI的HSSFWorkbook设置dd/MM/yyyy日期格式失效问题

问题

使用HSSFWorkbook生成带日期值的.xlsx文件,传入Date类生成的日期(示例:Wed Apr 19 15:00:17 IST 2023),并通过createHelper.createDataFormat().getFormat("dd/MM/yyyy")设置单元格日期格式为dd/MM/yyyy,但下载后的Excel中显示格式不符合预期(预期为19/04/2023)。

相关代码片段:

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. 匹配Workbook类型与文件格式

HSSFWorkbook仅支持生成旧版.xls格式文件,若目标是.xlsx,必须替换为XSSFWorkbook——这是格式异常的核心原因,混用格式会导致Excel解析样式时出错。

修改初始化代码:

Workbook wb = new XSSFWorkbook(); // 替换原HSSFWorkbook

2. 正确设置日期格式

针对不同Workbook类型,采用对应的格式设置方式:

  • XSSFWorkbook(.xlsx):
CellStyle cellStyle = wb.createCellStyle();
DataFormat dataFormat = createHelper.createDataFormat();
cellStyle.setDataFormat(dataFormat.getFormat("dd/MM/yyyy"));
  • HSSFWorkbook(.xls):直接使用HSSFDataFormat避免格式索引冲突:
HSSFDataFormat dataFormat = (HSSFDataFormat) wb.createDataFormat();
short formatIndex = dataFormat.getFormat("dd/MM/yyyy");
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(formatIndex);

3. 规范日期值的设置

优先使用Calendar而非Date设置单元格值,避免时区解析问题,确保Excel识别为日期类型:

Calendar cal = Calendar.getInstance();
cell.setCellValue(cal);

内容的提问来源于stack exchange,提问作者Prakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 10:55:06