1. Overview
In this quick tutorial, we're going to talk about how we can set formulas in a Microsoft Excel spreadsheet using Apache POI through a simple example.
2. Apache POI
Apache POI is a popular open-source Java library that provides programmers with APIs to create, modify, and display MS Office files.
It uses Workbook to represent an Excel file and its elements. A Cell in an Excel file can have different types such as FORMULA.
In order to see Apache POI in action, we're going to set a formula to subtract the sum of the values in columns A and B in an Excel file. The linked file contains the data below:
3. Dependencies
First, we need to add the POI dependency to our project pom.xml file. To work with Excel 2007+ workbooks, we should use poi-ooxml:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
Note that for earlier versions of Excel, we should use the poi dependency instead.
4. Cell Lookup
To begin, let's first open our file and construct the appropriate workbook:
FileInputStream inputStream = new FileInputStream(new File(fileLocation));
XSSFWorkbook excel = new XSSFWorkbook(inputStream);
Then, we need to create or look up the cell we're going be using. Using the data shared earlier, we want to edit cell C1.
That's on the first sheet and the first row, and we can ask POI for the first blank column:
XSSFSheet sheet = excel.getSheetAt(0);
int lastCellNum = sheet.getRow(0).getLastCellNum();
XSSFCell formulaCell = sheet.getRow(0).createCell(lastCellNum + 1);
5. Formulas
Next, we want to set a formula on the cell we've looked up.
As stated earlier, let's subtract the sum of column B from the sum of column A. In Excel, this would be:
=SUM(A:A)-SUM(B:B)
And we can write that into our formulaCell with the setCellFormula method:
formulaCell.setCellFormula("SUM(A:A)-SUM(B:B)");
Now, this won't evaluate the formula. To do that, we'll need to use POI's XSSFFormulaEvaluator:
XSSFFormulaEvaluator formulaEvaluator =
excel.getCreationHelper().createFormulaEvaluator();
formulaEvaluator.evaluateFormulaCell(formulaCell);
The result will be set in the first Cell of the next empty column:
As we can see, the result is calculated and saved in the first cell of column C. Also the formula is shown in the formula bar.
Note that the FormulaEvaluator class provides us with other methods to evaluate FORMULA in Excel workbooks, like evaluateAll, which will loop over all cells and evaluate them.
6. Conclusion
In this tutorial, we showed how to set a formula on a cell in an Excel file in Java using the Apache POI API.
The complete source code for this article is available over on GitHub.