为了账号安全,请及时绑定邮箱和手机立即绑定

使用 apache poi 输入时间

使用 apache poi 输入时间

蓝山帝景 2021-09-29 17:23:54
我已经使用 Apahe POI 将时间输入到 excel 文件中,如下所示Time time = Time.valueOf("19:30:00");CellStyle cellStyle1 = workbook.createCellStyle();CreationHelper createHelper1 = workbook.getCreationHelper();cellStyle1.setDataFormat(        createHelper.createDataFormat().getFormat("HH:MM AM/PM"));cell = row.getCell(1);System.out.println(time.toString());cell.setCellValue(time);cell.setCellStyle(cellStyle1);这导致了预期的 excel 但是有以下不匹配发现 excel 的实际值和显示值不同 - 我怎样才能使它们相同,我是否使用不正确的方式更新 Excel 时间格式的值
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

Excel 中,日期和时间存储为浮点数,即自01/01/1900午夜以来的天数。

如果您将存储一些小于1.0- 的值,它将被解释为时间,否则为日期,例如:

  1. 0.5 将等于 12:00:00

  2. 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将如下所示:

//img1.sycdn.imooc.com//615430d40001feb204590138.jpg

假设问题与上述内容有关,Excel 中的实际日期/时间值应为双精度值,而表示值应基于您设置的样式/模式;假设目标是实现这种相似性,即19:30:00在公式和07:30 PM单元格中。

如果没有并且目标是07:30 PM在两种情况下都有 - 那么您只需要存储一个字符串值,而不是日期/时间。


查看完整回答
反对 回复 2021-09-29
?
慕标琳琳

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();

    }

}


查看完整回答
反对 回复 2021-09-29
  • 2 回答
  • 0 关注
  • 241 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信