我正在处理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。
你能帮帮我吗?我真的很感激你的效果!答案 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工作表上自动对所选单元格求和。