apache poi excel小时格式设置单元格值java
我正在进行Excel生成工作,还完成了Excel中的所有功能,但出现了一个问题。我想设置一个单元格值,如HH:MM only not date。我有一根像12:45,36:30102:50的线。对于每个单元格,但我想检测这些单元格在Excel中的时间格式是否大于24小时,如果我选择这些单元格,则在Excel中显示小时总数。我不知道怎么做。我在stack()上找到了一篇类似的文章,但这篇文章只展示了如何读取这些单元格。我想设置一个单元格值,如大于24小时格式,仅小时和分钟,如25:00、205:00、152:30apache poi excel小时格式设置单元格值java,java,excel,apache-poi,Java,Excel,Apache Poi,我正在进行Excel生成工作,还完成了Excel中的所有功能,但出现了一个问题。我想设置一个单元格值,如HH:MM only not date。我有一根像12:45,36:30102:50的线。对于每个单元格,但我想检测这些单元格在Excel中的时间格式是否大于24小时,如果我选择这些单元格,则在Excel中显示小时总数。我不知道怎么做。我在stack()上找到了一篇类似的文章,但这篇文章只展示了如何读取这些单元格。我想设置一个单元格值,如大于24小时格式,仅小时和分钟,如25:00、205:0
你能帮我吗?我真的很欣赏你的效果 将评论升级为答案 Excel将日期存储为自1900年或1904年以来的整数天,具体取决于设置。。。(里面有一些闰年问题)。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中编写一样 最后我从@gagravr-answer得到了解决方案 下面是将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工作表上自动对所选单元格求和。如果您告诉Apache POI为这些数字设置与您在excel中为这些数字设置的格式字符串相同的格式字符串,会发生什么情况?数字的计算与1小时某物的计算不同?excel使用1900/1904年以来的天数,以分数表示小时,因此0.5是12:00,1.5是36:00还是1900-01-02T12:00:00取决于您是将其格式化为日期还是小时!谢谢你的建议,我终于找到了解决方案,我的答案如下:)你可以像下面这样添加秒:cell.setCellValue(小时/24d+(分钟/60d)/24d+(秒/60d/60d)/24d);