apache poi excel hours格式设置单元格值java

时间:2014-03-12 06:10:11

标签: java excel apache-poi

我正在处理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。

你能帮帮我吗?我真的很感激你的效果!

2 个答案:

答案 0 :(得分:3)

宣传对答案的评论....

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中一样呈现它!

答案 1 :(得分: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工作表上自动对所选单元格求和。