こんにちは。
コンストラクションソリューション事業部 開発部の菊池と申します。
最近、業務でJavaからExcelを操作することのできるApachePOIというライブラリを使用する機会があったので、ここに備忘録として残しておこうかなと思います。
ApachePOIについて
ApachePOIとは、Javaを使用して、ExcelやWordなどのファイルを操作するためのライブラリです。
今回は、Excelを操作していこうと思います。
使用したライブラリ
- commons-codec-1.15.jar
- commons-fileupload-1.4.jar
- commons-collections4-4.4.jar
- commons-io-2.7.jar
- commons-compress-1.20.jar
- commons-math3-3.6.1.jar
- commons-csv-1.8.jar
- jackson-annotations-2.10.3.jar
- jackson-databind-2.10.3.jar
- jackson-core-2.10.3.jar
- poi-5.0.0.jar
- poi-ooxml-5.0.0.jar
- poi-ooxml-lite-5.0.0.jar
- xmlbeans-4.0.0.jar
実際にApachePOIを使用してみる
ApachePOIを使用して、次のようなJavaのプログラムを実行してみます。
- ある値を、指定したセルに入力
- 再計算実行
- 指定したセルより、再計算後の値を取得
手順
- エクセルファイルのパスの指定
- Workbookの作成
- 使用するシートの指定
- 入力セルの決定(A1とする)
- 入力値の決定(10とする)
- 再計算実行
- 出力セルの決定(B1とする)
- 出力値の取得
※ビルドパスの設定等は省略させていただきます。
コードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
import java.io.FileInputStream; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class Excel { public static void main(String[] args){ //Excelのパスの指定 String excelFilePath = "C:\\test.xlsx"; //Workbookの作成 try(Workbook wb = WorkbookFactory.create(new FileInputStream(excelFilePath));){ //シートの選択 Sheet sheet = wb.getSheetAt(0); //入力セルの行の指定 Row inputRow = sheet.getRow(0); //入力セルの列の指定 Cell inputCell = inputRow.getCell(0); //入力セルに対しての入力値の決定 inputCell.setCellValue(10); //再計算実行 wb.getCreationHelper().createFormulaEvaluator().evaluateAll(); //出力セルの行の指定 Row outputRow = sheet.getRow(0); //出力セルの列の指定 Cell outputCell = outputRow.getCell(1); //出力値の取得 System.out.println("再計算後の値:" + outputCell.getNumericCellValue()); } catch (Exception e) { e.printStackTrace(); } } } |
また、指定したエクセル(test.xlsx)にB1にA1+10という式を入力しておきます。
実行してみる
結果
1 2 |
計算後の値:20.0 |
しっかり再計算されていることがわかりますね。
このようにして、Javaから簡単にExcelを操作することができるんです!!!
また、今回は簡単な式をセルに入力していますが、ほかにエクセル関数を使用することも可能です。
まとめ
実際の現場でこのApachePOIを使用したのですが、そこではテスト時に発見できなったエラーなどが発生しとても苦労しました。
また、私自身、現場に出て本番対応するということが初めてだったということもあり、なおさら焦りを感じました。
もう少しテストをしっかりしておくなど事前準備をしておけば防げた問題も多々あったと思います。
そういった点も含め、今回のプロジェクトに携わったことで自分の未熟さを実感しました。
もっと成長するために、これからもっと様々なことを学んでいきます!