1. 概要

このクイックチュートリアルでは、簡単な例を使用して、 ApachePOIを使用してMicrosoftExcelスプレッドシートに数式を設定する方法について説明します。

2. Apache POI

Apache POIは、MS Office ファイルを作成、変更、および表示するためのAPIをプログラマーに提供する人気のあるオープンソースJavaライブラリです。

ワークブックを使用してExcelファイルとその要素を表します。 ExcelファイルのCellは、FORMULAなどのさまざまなタイプを持つことができます。

Apache POIの動作を確認するために、Excelファイルの列Aと列Bの値の合計を減算する式を設定します。 リンクされたファイルには、以下のデータが含まれています。

3. 依存関係

まず、POI依存関係をプロジェクトpom.xmlファイルに追加する必要があります。 Excel 2007以降のワークブックを使用するには、poi-ooxmlを使用する必要があります。

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.0</version>
</dependency>

以前のバージョンのExcelでは、代わりにpoi依存関係を使用する必要があることに注意してください。

4. セルルックアップ

まず、ファイルを開いて適切なワークブックを作成しましょう。

FileInputStream inputStream = new FileInputStream(new File(fileLocation));
XSSFWorkbook excel = new XSSFWorkbook(inputStream);

次に、使用するセルを作成または検索する必要があります。 以前に共有したデータを使用して、セルC1を編集します。

これは最初のシートと最初の行にあり、POIに最初の空白の列を要求できます。

XSSFSheet sheet = excel.getSheetAt(0);
int lastCellNum = sheet.getRow(0).getLastCellNum();
XSSFCell formulaCell = sheet.getRow(0).createCell(lastCellNum + 1);

5. 数式

次に、調べたセルに数式を設定します。

前述のように、列Aの合計から列Bの合計を減算してみましょう。 Excelでは、これは次のようになります。

=SUM(A:A)-SUM(B:B)

そして、それをsetCellFormulaメソッドを使用してformulaCellに書き込むことができます。

formulaCell.setCellFormula("SUM(A:A)-SUM(B:B)");

これで、数式は評価されません。これを行うには、POIのXSSFFormulaEvaluatorを使用する必要があります。

XSSFFormulaEvaluator formulaEvaluator = 
  excel.getCreationHelper().createFormulaEvaluator();
formulaEvaluator.evaluateFormulaCell(formulaCell);

結果は、次の空の列の最初のセルに設定されます。

ご覧のとおり、結果が計算され、列Cの最初のセルに保存されます。 また、数式は数式バーに表示されます。

FormulaEvaluator クラスは、Excelワークブックで FORMULA を評価する他のメソッド、たとえば EvaluationAll を提供し、すべてのセルをループして評価することに注意してください。

6. 結論

このチュートリアルでは、Apache POI APIを使用して、JavaのExcelファイルのセルに数式を設定する方法を示しました。

この記事の完全なソースコードは、GitHubから入手できます。