【问题标题】:apache poi excel hours format set cell value javaapache poi excel小时格式设置单元格值java
【发布时间】:2014-03-12 06:10:11
【问题描述】:

我正在处理 Excel 生成,并在 Excel 中完成了所有功能,但出现了一个问题。我想设置一个像 HH:MM 这样的单元格值,而不是日期。我有一个像 12:45,36:30,102:50 这样的字符串。对于每个单元格,但我想检测这些单元格在 Excel 中的时间格式是否大于 24 小时,如果我选择单元格,则在 Excel 上显示小时总和。我不知道该怎么做。我在堆栈 (HH:MM:SS xls reading using Apache POI) 上找到了一个类似的帖子,但这篇帖子只展示了如何阅读这些单元格。我想设置一个大于 24 小时格式的单元格值,仅设置小时和分钟,例如 25:00、205:00、152:30。

你能帮帮我吗?我真的很欣赏你的效果!

【问题讨论】:

  • 如果您告诉 Apache POI 设置与您在 Excel 中为这些数字设置的格式字符串相同的格式字符串会怎样?
  • 数字不是像 60 分钟那样计算为 1 小时计算吗?
  • Excel 使用自 1900/1904 年以来的天数,小数表示小时,因此 0.5 是 12:00,1.5 是 36:00 或 1900-01-02T12:00:00,具体取决于您是否格式化它是日期或小时!

标签: java excel apache-poi


【解决方案1】:

提升对答案的评论....

Excel 将日期存储为自 1900 年或 1904 年以来的整数天,具体取决于设置,ish...(其中存在一些闰年问题)。 Excel 将时间存储为一天的分数。因此,在 1900 窗口文件上,取决于使用的格式字符串

0.1 = 02:24:00
0.5 = 12:00:00
1.5 = 1900-01-02 12:00:00
1.5 = 36:00:00

因此,如果您想存储和显示 36 小时,请计算出 (1.5) 是一天的几分之一,然后对其应用支持 >36 小时的格式字符串。格式化为HH:MM,你会得到12:00。格式化为[HH]:MM,你会得到36:00

使用 Excel 计算您需要的格式字符串 - POI 只是将您提供的格式字符串写入文件,Excel 将其呈现为就像您在 Excel 中编写一样!

【讨论】:

  • 感谢您的建议,我终于在我的答案下方找到了解决方案:)
【解决方案2】:

我终于从@Gagravrr 的回答中得到了解决方案

以下代码用于将 12:00 转换为 0.5 或其他内容

                            Date inserted_date = time_format.parse((String) obj);
                            CellStyle cellStyle = workbook.createCellStyle();
                            cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("[HH]:MM"));
                            Calendar calendar = Calendar.getInstance();
                            calendar.setTime(inserted_date);
                            int hours = calendar.get(Calendar.HOUR_OF_DAY);
                            int minutes = calendar.get(Calendar.MINUTE);

                            //System.out.println("\nHOUR :"+hours+"\n");
                            //System.out.println("\nMINS :"+minutes+"\n");
                            //System.out.println("\nCALC :"+ hours/24d+(minutes/60d)/24d +"\n");
                            cell.setCellValue(hours / 24d + (minutes / 60d) / 24d);
                            cell.setCellStyle(cellStyle);

此代码仅插入时间并在 Excel 工作表上自动汇总所选单元格。

【讨论】:

  • 你可以像下面这样添加秒:cell.setCellValue(hours / 24d + (minutes / 60d) / 24d + (seconds / 60d /60d) / 24d);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 2020-12-14
相关资源
最近更新 更多