changes after adding excel file

This commit is contained in:
STS 2020-07-11 10:31:02 +02:00
parent 8f22ea5d36
commit 3e31cb49b1
3 changed files with 45 additions and 33 deletions

View File

@ -1,34 +1,26 @@
package com.baeldung.poi.excel.setFormula; 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.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator; import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.List;
public class ExcelFormula { public class ExcelFormula {
XSSFWorkbook excel; public double setFormula(String fileLocation, XSSFWorkbook wb, String formula) throws IOException {
public XSSFSheet inserData(List<Integer> dataList) { XSSFSheet sheet = wb.getSheetAt(0);
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);
int lastCellNum = sheet.getRow(0).getLastCellNum(); int lastCellNum = sheet.getRow(0).getLastCellNum();
XSSFCell formulaCell = sheet.getRow(0).createCell(lastCellNum + 1); XSSFCell formulaCell = sheet.getRow(0).createCell(lastCellNum);
formulaCell.setCellFormula(formula); formulaCell.setCellFormula(formula);
XSSFFormulaEvaluator formulaEvaluator = excel.getCreationHelper().createFormulaEvaluator(); XSSFFormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator();
CellValue evaluate = formulaEvaluator.evaluate(formulaCell); formulaEvaluator.evaluateFormulaCell(formulaCell);
if(excel != null) FileOutputStream fileOut = new FileOutputStream(new File(fileLocation));
excel.close(); wb.write(fileOut);
return evaluate.getNumberValue(); wb.close();
fileOut.close();
return formulaCell.getNumericCellValue();
} }
} }

Binary file not shown.

View File

@ -2,28 +2,48 @@ package com.baeldung.poi.excel.setFormula;
import org.apache.poi.ss.util.CellReference; import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Assert; import org.junit.Assert;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.net.URISyntaxException;
import java.util.List; import java.nio.file.Paths;
class ExcelFormulaUnitTest { 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 @Test
void givenExcelData_whenSetAndEvaluateFormula() throws IOException { void givenExcelData_whenSetAndEvaluateFormula() throws IOException {
ExcelFormula excelFormula = new ExcelFormula(); FileInputStream inputStream = new FileInputStream(new File(fileLocation));
List<Integer> data = Arrays.asList(2, 5, 10, 15, 7, 9); XSSFWorkbook wb = new XSSFWorkbook(inputStream);
XSSFSheet sheet = excelFormula.inserData(data); XSSFSheet sheet = wb.getSheetAt(0);
int result = 0; double resultColumnA = 0;
double resultColumnB = 0;
for (int row = 0; row <= sheet.getLastRowNum(); row++) { 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 colNameA = CellReference.convertNumToColString(0);
String startCell = colName + 1; String colNameB = CellReference.convertNumToColString(1);
String stopCell = colName + (sheet.getLastRowNum() + 1); String startCellA = colNameA + 1;
String sumFormula = String.format("SUM(%s:%s)", startCell, stopCell); String stopCellA = colNameA + (sheet.getLastRowNum() + 1);
int resultValue = (int) excelFormula.setFormula(sumFormula); String sumFormulaForColumnA = String.format("SUM(%s:%s)", startCellA, stopCellA);
Assert.assertEquals("The results are the same!", resultValue , result); 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);
} }
} }