如何将单元格值设置为日期并应用默认的Excel日期格式?

2022-08-31 09:03:48

我一直在使用Apache POI以编程方式读取现有的Excel 2003文件一段时间。现在我有一个新的要求,在内存中创建整个.xls文件(仍然使用Apache POI),然后在最后将它们写入文件。阻碍我的唯一问题是处理带有日期的单元格。

请考虑以下代码:

Date myDate = new Date();
HSSFCell myCell;
// code that assigns a cell from an HSSFSheet to 'myCell' would go here...
myCell.setCellValue(myDate);

当我将包含此单元格的工作簿写出到文件中并使用Excel打开它时,该单元格显示为数字。是的,我确实意识到Excel将其“日期”存储为自1900年1月1日以来的天数,这就是单元格中的数字所代表的。

问:我可以在 POI 中使用哪些 API 调用来告诉它我想要将默认日期格式应用于我的日期单元格?

理想情况下,我希望电子表格单元格以与 Excel 分配的默认日期格式相同的默认日期格式显示,如果用户在 Excel 中手动打开电子表格并键入 Excel 识别为日期的单元格值。


答案 1

http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells

CellStyle cellStyle = wb.createCellStyle();
CreationHelper createHelper = wb.getCreationHelper();
cellStyle.setDataFormat(
    createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
cell = row.createCell(1);
cell.setCellValue(new Date());
cell.setCellStyle(cellStyle);

答案 2

要设置为默认的Excel类型日期(默认为操作系统级别的区域设置/->即.xlsx在由德国人或英国人打开时看起来会有所不同/并且如果您在Excel的单元格格式选择器中选择它,则用星号标记),您应该:

    CellStyle cellStyle = xssfWorkbook.createCellStyle();
    cellStyle.setDataFormat((short)14);
    cell.setCellStyle(cellStyle);

我用xlsx做了它,它工作得很好。