From 3e31cb49b16682206ba189db0233d1e5bc0b43fd Mon Sep 17 00:00:00 2001 From: STS Date: Sat, 11 Jul 2020 10:31:02 +0200 Subject: [PATCH] changes after adding excel file --- .../poi/excel/setFormula/ExcelFormula.java | 32 +++++------- .../src/main/resources/SetFormulaTest.xlsx | Bin 0 -> 8014 bytes .../setFormula/ExcelFormulaUnitTest.java | 46 +++++++++++++----- 3 files changed, 45 insertions(+), 33 deletions(-) create mode 100644 apache-poi/src/main/resources/SetFormulaTest.xlsx diff --git a/apache-poi/src/main/java/com/baeldung/poi/excel/setFormula/ExcelFormula.java b/apache-poi/src/main/java/com/baeldung/poi/excel/setFormula/ExcelFormula.java index 7bd8d8a035..8b1ca5a89a 100644 --- a/apache-poi/src/main/java/com/baeldung/poi/excel/setFormula/ExcelFormula.java +++ b/apache-poi/src/main/java/com/baeldung/poi/excel/setFormula/ExcelFormula.java @@ -1,34 +1,26 @@ package com.baeldung.poi.excel.setFormula; -import org.apache.poi.ss.usermodel.CellValue; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; -import java.util.List; public class ExcelFormula { - XSSFWorkbook excel; - public XSSFSheet inserData(List dataList) { - excel = new XSSFWorkbook(); - XSSFSheet sheet = excel.createSheet(); - int rowNum =0 ; - for (Integer data : dataList){ - sheet.createRow(rowNum++).createCell(0).setCellValue(data); - } - return sheet; - } - public double setFormula(String formula) throws IOException { - XSSFSheet sheet = excel.getSheetAt(0); + public double setFormula(String fileLocation, XSSFWorkbook wb, String formula) throws IOException { + XSSFSheet sheet = wb.getSheetAt(0); int lastCellNum = sheet.getRow(0).getLastCellNum(); - XSSFCell formulaCell = sheet.getRow(0).createCell(lastCellNum + 1); + XSSFCell formulaCell = sheet.getRow(0).createCell(lastCellNum); formulaCell.setCellFormula(formula); - XSSFFormulaEvaluator formulaEvaluator = excel.getCreationHelper().createFormulaEvaluator(); - CellValue evaluate = formulaEvaluator.evaluate(formulaCell); - if(excel != null) - excel.close(); - return evaluate.getNumberValue(); + XSSFFormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator(); + formulaEvaluator.evaluateFormulaCell(formulaCell); + FileOutputStream fileOut = new FileOutputStream(new File(fileLocation)); + wb.write(fileOut); + wb.close(); + fileOut.close(); + return formulaCell.getNumericCellValue(); } } diff --git a/apache-poi/src/main/resources/SetFormulaTest.xlsx b/apache-poi/src/main/resources/SetFormulaTest.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a0fe73f0ebe74ad3ca9020e685c4a6f0564687e5 GIT binary patch literal 8014 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 B-9P{U literal 0 HcmV?d00001 diff --git a/apache-poi/src/test/java/com/baeldung/poi/excel/setFormula/ExcelFormulaUnitTest.java b/apache-poi/src/test/java/com/baeldung/poi/excel/setFormula/ExcelFormulaUnitTest.java index 8daf311149..990b93fcbb 100644 --- a/apache-poi/src/test/java/com/baeldung/poi/excel/setFormula/ExcelFormulaUnitTest.java +++ b/apache-poi/src/test/java/com/baeldung/poi/excel/setFormula/ExcelFormulaUnitTest.java @@ -2,28 +2,48 @@ package com.baeldung.poi.excel.setFormula; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.Assert; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; -import java.util.Arrays; -import java.util.List; +import java.net.URISyntaxException; +import java.nio.file.Paths; class ExcelFormulaUnitTest { + private static String FILE_NAME = "SetFormulaTest.xlsx"; + private String fileLocation; + private ExcelFormula excelFormula; + + @BeforeEach + public void setup() throws URISyntaxException { + fileLocation = Paths.get(ClassLoader.getSystemResource(FILE_NAME).toURI()).toString(); + excelFormula = new ExcelFormula(); + } + @Test void givenExcelData_whenSetAndEvaluateFormula() throws IOException { - ExcelFormula excelFormula = new ExcelFormula(); - List data = Arrays.asList(2, 5, 10, 15, 7, 9); - XSSFSheet sheet = excelFormula.inserData(data); - int result = 0; + FileInputStream inputStream = new FileInputStream(new File(fileLocation)); + XSSFWorkbook wb = new XSSFWorkbook(inputStream); + XSSFSheet sheet = wb.getSheetAt(0); + double resultColumnA = 0; + double resultColumnB = 0; for (int row = 0; row <= sheet.getLastRowNum(); row++) { - result += sheet.getRow(row).getCell(0).getNumericCellValue(); + resultColumnA += sheet.getRow(row).getCell(0).getNumericCellValue(); + resultColumnB += sheet.getRow(row).getCell(1).getNumericCellValue(); } - String colName = CellReference.convertNumToColString(0); - String startCell = colName + 1; - String stopCell = colName + (sheet.getLastRowNum() + 1); - String sumFormula = String.format("SUM(%s:%s)", startCell, stopCell); - int resultValue = (int) excelFormula.setFormula(sumFormula); - Assert.assertEquals("The results are the same!", resultValue , result); + String colNameA = CellReference.convertNumToColString(0); + String colNameB = CellReference.convertNumToColString(1); + String startCellA = colNameA + 1; + String stopCellA = colNameA + (sheet.getLastRowNum() + 1); + String sumFormulaForColumnA = String.format("SUM(%s:%s)", startCellA, stopCellA); + String startCellB = colNameB + 1; + String stopCellB = colNameB + (sheet.getLastRowNum() + 1); + String sumFormulaForColumnB = String.format("SUM(%s:%s)", startCellB, stopCellB); + double resultValue = excelFormula.setFormula(fileLocation, wb, sumFormulaForColumnA + "-" + sumFormulaForColumnB); + Assert.assertEquals(resultValue, resultColumnA - resultColumnB, 0d); } }