[Java] POIでExcelに日時(LocalDateTime)と時刻(String)を設定する。Excelの自動計算にも対応させる

どうも打ち合わせ中あまりの寒さに、熱を持ったMacBookを抱きかかえて暖を取っているざわです。

今日はPOIを使って日時の設定とかのメモです。

環境

  • Java8
  • Apache POI 3.13
  • Excel(xlsx)

やりたいこと

Java: 出勤と退勤、休憩時間を自動入力
Excel: 数式を使って勤務時間を算出

数式は以下のような簡単なもので

勤務時間 = 退勤(日時) - 出勤(日時) - 休憩時間("HH:mm")

日時の設定

Java側はLocalDateTimeで値を持っています。
これをそのまま設定しようとすると、Excel側で計算してくれないので、Date型に変換します。

Row row = sheet.getRow(1); //該当行の番号
Cell cell = row.getCell(1); //該当セルの番号
// LocalDateTimeをDateに変換
Date dateTime = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
cell.setCellValue(dateTime);

時刻の設定

Java側はHH:mm形式の文字列を持っている前提。
⇨LocalTime使う場合は24:00以降を保持してくれない(たしか00:00に戻るんだっけかな?)ので、25:00とか設定したい場合は対応が必要

Row row = sheet.getRow(1); //該当行の番号
Cell cell = row.getCell(2); //該当セルの番号
// 時刻の設定
cell.setCellValue(DateUtil.convertTime("1:00");

数式の再計算

//数式更新
sheet.setForceFormulaRecalculation(true);
wb.getCreationHelper().createFormulaEvaluator().evaluateAll();

上記コードを書かないと数式部分がエラーになります。

Excel確認

期待通りです。

おしまい

健康第一

サーバサイドエンジニア。オムライスが好物

シェアする

  • このエントリーをはてなブックマークに追加

フォローする