- ベストアンサー
POIでExcelに時刻の値を出力したい
- 現在、JAVAでEXCELで運用している社内勤務表をWebから入力できるシステムを開発しています。
- 現在の問題は、POIライブラリを使用して勤務開始時間や勤務終了時間の値をExcelのセルに出力する際に、h:mm形式の値が出力できないことです。
- 既に試した方法(文字列やシリアル値としての出力など)では期待通りの結果が得られず、値も表示もh:mm形式で出力する方法がわかりません。ご教授頂けないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
できないわ。 残念ながら。 それが証拠に、 最初に10:30と入力したExcelのセルから getCellStyleした結果をsetCellStyleしても 反映されないわ。 テスト3の方法を取るのが一番と思うわ。 それと、POI3.2は ・createCellでshortへのキャストは不要よ。 ・テスト1で、文字列は必ずHSSFRichTextStringに変換すること。
その他の回答 (2)
- sonar5
- ベストアンサー率0% (0/1)
excelの時刻は、少数点以下のシリアル値を設定します。 excelの書式は、時刻とします。 excelのシリアル値は1900年1月1日が1なので 日付なしの時刻は、少数以下の数値です。 (例) 9:15 シリアル値=9*(1/24) + 15*(1/24/60) これをpoiのsetCellValueで設定すると時刻のみとなります。 XXX.setCellValue(シリアル値); (PGの例) SetCellTime(10,2,"12:53"); private static void SetCellTime(HSSFSheet sheet,int r,int c,String data){ HSSFRow row = sheet.getRow(r-1); HSSFCell cell = row.getCell(c-1); double s; double hh; double mm; //シリアル値への変換 hh = Double.parseDouble(data.substring(0,2))*(1.0/24.0); mm = Double.parseDouble(data.substring(3,5))*(1.0/24.0/60.0); s = hh + mm; cell.setCellValue(s); return; }
- askaaska
- ベストアンサー率35% (1455/4149)
これはただの掲示板的レス > POIの中身をいじる それでできるなら既に誰かがやっている気もするけど 余裕があったら見てみようかしら。 Excel2007対応なら何とかなりそうな気もするんだけどね。 xlsxだし。
お礼
askaaskaさん 回答ありがとうございます。 10:30という値はPOIでは出力できないんですね。 この質問の前に半日調べてわからなかったので、もしかして無理かなとは思っていたんですが……残念です。 >・createCellでshortへのキャストは不要よ。 >・テスト1で、文字列は必ずHSSFRichTextStringに変換すること。 了解しました。 入門サイトのプログラムを真似たら警告が出るようなので直します。 裏技があるかもしれないのでもう少し質問をオープンにしておきます。(基本無理ということは納得したんですが一応) POIの中身をいじるとか(無理かな?)