2 回答
TA贡献1853条经验 获得超18个赞
在Excel 中,日期和时间存储为浮点数,即自01/01/1900午夜以来的天数。
如果您将存储一些小于1.0
- 的值,它将被解释为时间,否则为日期,例如:
0.5
将等于12:00:00
5.5
将等于05.01.1900 12:00:00
要正确处理日期和时间,请使用org.apache.poi.ss.usermodel.DateUtil
,例如您的示例可能如下所示:
double time = DateUtil.convertTime("19:30:00");
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setDataFormat(
workbook.createDataFormat().getFormat("HH:MM AM/PM"));
cell.setCellValue(time);
cell.setCellStyle(cellStyle);
结果Excel将如下所示:
假设问题与上述内容有关,Excel 中的实际日期/时间值应为双精度值,而表示值应基于您设置的样式/模式;假设目标是实现这种相似性,即19:30:00
在公式和07:30 PM
单元格中。
如果没有并且目标是07:30 PM
在两种情况下都有 - 那么您只需要存储一个字符串值,而不是日期/时间。
TA贡献1830条经验 获得超9个赞
我使用来自 Office 365 ProPlus 的 POI 3.17 和 Excel 和瑞典语语言环境。我在您的代码中添加了几行(用于创建工作簿和工作表等)。下面的代码工作正常。在单元格中我得到“07:30 PM”和在公式栏中“1970-01-01 19:30:00”。如果在运行我的代码(使用 POI 3.17)时没有得到类似的结果,我的猜测是您的 Excel 有点奇怪。
public void createExcelFile() {
XSSFWorkbook workbook = new XSSFWorkbook();
Time time = Time.valueOf("19:30:00");
CellStyle cellStyle1 = workbook.createCellStyle();
CreationHelper createHelper1 = workbook.getCreationHelper();
cellStyle1.setDataFormat(createHelper1.createDataFormat().getFormat("HH:MM AM/PM"));
Sheet sheet = workbook.createSheet("Sheet");
Row row = sheet.createRow(0);
Cell cell = row.createCell(1);
System.out.println(time.toString());
cell.setCellValue(time);
cell.setCellStyle(cellStyle1);
try {
FileOutputStream outputStream = new FileOutputStream("C:/temp/file.xlsx");
workbook.write(outputStream);
workbook.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
添加回答
举报