changes after adding excel file
This commit is contained in:
parent
8f22ea5d36
commit
3e31cb49b1
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BIN
apache-poi/src/main/resources/SetFormulaTest.xlsx
Normal file
BIN
apache-poi/src/main/resources/SetFormulaTest.xlsx
Normal file
Binary file not shown.
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user