2014-03-12 168 views
1

我正在使用Excel生成Excel,並且還在Excel中執行了所有功能,但會出現一個問題。我想設置像HH:MM這樣的單元格值,而不是日期。我有一個像12:45,36:30,102:50這樣的字符串。對於每個單元格,我都希望在Excel中檢測到這些單元格的時間格式大於24小時,如果我選擇這些單元格,則可以在Excel上顯示小時數。我不知道該怎麼做。我在堆棧中發現了一個類似的帖子(HH:MM:SS xls reading using Apache POI),但是這篇文章只展示瞭如何讀取這些單元格。我想設置一個單元格值,比如25:00,205:00,152:30等只有幾小時和幾分鐘的格式。apache poi excel小時格式設置單元格值java

你能幫我嗎?我真的很感激你的效果!

+0

如果您告訴Apache POI設置您在Excel中爲這些數字設置的相同格式字符串,會發生什麼情況? – Gagravarr

+0

數字計算不像60分鐘計算1小時? –

+0

Excel使用自1900/1904以來的天數,分數爲幾小時,因此0.5爲12:00,1.5爲36:00或1900-01-02T12:00:00,具體取決於您是將日期格式化爲小時還是小時! – Gagravarr

回答

2

推進到一個答案評論....

Excel存儲自1900年或1904年,是整天日期,取決於設置,ISH ...(這裏也有一些閏年問題在那裏)。 Excel將時間存儲爲一天中的幾分之一。因此,在1900 window'd文件,這取決於格式字符串使用

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中!

+0

感謝您的建議我終於得到解決方案找到我的答案:) –

1

終於我得到從@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工作表。

相關問題