Apache POI
仕事でJavaからExcelシートの取得、設定を行う必要があったので、Apache POIについて調べてみました。
・ダウンロード
以下よりPOIのjarをダウンロード
http://poi.apache.org/download.html#POI-3.15
バイナリ版を取得
poi-bin-3.16-beta1-20161120.zip
・インストール
上記のzipファイルを解凍し、poiフォルダをeclipseのjavaプロジェクトにドラッグすると、プロジェクトにコピーされます。
コピーされたpoiのライブラリのjarをすべて選んで右クリックし、クラスパスへ追加します。
・POIの使い方
調査したところ、POIにはHSSFとXSSF があり、Excel形式がxlsの場合はHSSF、xlsx(2007以降)の場合は、XSSFで使い分ける必要があるようです。
以前プログラミングしていて、ちょっと面倒だと思ったのは、セルの型を意識したプログラミングをする必要があることでした。
http://www.javadrive.jp/poi/cell/index7.html
数式の結果を取得するのは結構大変です。
http://shin-kawara.seesaa.net/article/159878953.html
こちらにFormulaEvaluator#evaluateInCell()を使用して、セルの値を計算式の結果を取得するという情報がありました。
上手くいくかと思ったのですが、=CELL("filename",A1)のシート名を取ろうとすると、NotImplementedExceptionでうまく取れません。
http://www.ne.jp/asahi/hishidama/home/tech/apache/poi/cell.html
結局以下の情報を参考にするとCELL関数の結果を取得することができました。
とりあえず、サンプルソースを参考に動作確認をしてみました。
Exception in thread "main" org.apache.poi.ss.formula.eval.NotImplementedException: Error evaluating cell '【連携】通信設定'!K9
at org.apache.poi.ss.formula.WorkbookEvaluator.addExceptionInfo(WorkbookEvaluator.java:386)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateAny(WorkbookEvaluator.java:327)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluate(WorkbookEvaluator.java:259)
at org.apache.poi.xssf.usermodel.BaseXSSFFormulaEvaluator.evaluateFormulaCellValue(BaseXSSFFormulaEvaluator.java:65)
at org.apache.poi.ss.formula.BaseFormulaEvaluator.evaluateInCell(BaseFormulaEvaluator.java:137)
at org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator.evaluateInCell(XSSFFormulaEvaluator.java:77)
at org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator.evaluateInCell(XSSFFormulaEvaluator.java:36)
at excel.Sample.main(Sample.java:56)
Caused by: org.apache.poi.ss.formula.eval.NotImplementedFunctionException: CELL
at org.apache.poi.ss.formula.functions.NotImplementedFunction.evaluate(NotImplementedFunction.java:40)
at org.apache.poi.ss.formula.OperationEvaluatorFactory.evaluate(OperationEvaluatorFactory.java:132)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateFormula(WorkbookEvaluator.java:550)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateAny(WorkbookEvaluator.java:317)
... 6 more