mirror of
https://github.com/apache/poi.git
synced 2026-02-27 20:40:08 +08:00
SUMIFS should sum and treat booleans and strings as zero
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1891900 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0d6bd263fe
commit
c61d6bfbbc
@ -38,23 +38,32 @@ final class TestSum {
|
||||
|
||||
@Test
|
||||
void testSum() throws IOException {
|
||||
try (HSSFWorkbook wb = initWorkbook1()) {
|
||||
try (HSSFWorkbook wb = initWorkbookWithNA()) {
|
||||
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
|
||||
HSSFCell cell = wb.getSheetAt(0).getRow(0).createCell(100);
|
||||
confirmDouble(fe, cell, "SUM(B2:B5)", 70000);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSumWithBooleanAndString() throws IOException {
|
||||
try (HSSFWorkbook wb = initWorkbookWithBooleanAndString()) {
|
||||
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
|
||||
HSSFCell cell = wb.getSheetAt(0).getRow(0).createCell(100);
|
||||
confirmDouble(fe, cell, "SUM(B2:B7)", 70000);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSumWithNA() throws IOException {
|
||||
try (HSSFWorkbook wb = initWorkbook1()) {
|
||||
try (HSSFWorkbook wb = initWorkbookWithNA()) {
|
||||
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
|
||||
HSSFCell cell = wb.getSheetAt(0).getRow(0).createCell(100);
|
||||
confirmError(fe, cell, "SUM(B2:B6)", FormulaError.NA);
|
||||
}
|
||||
}
|
||||
|
||||
private HSSFWorkbook initWorkbook1() {
|
||||
private HSSFWorkbook initWorkbookWithNA() {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet();
|
||||
addRow(sheet, 0, "Property Value", "Commission", "Data");
|
||||
@ -66,6 +75,19 @@ final class TestSum {
|
||||
return wb;
|
||||
}
|
||||
|
||||
private HSSFWorkbook initWorkbookWithBooleanAndString() {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet();
|
||||
addRow(sheet, 0, "Property Value", "Commission", "Data");
|
||||
addRow(sheet, 1, 100000, 7000, 250000);
|
||||
addRow(sheet, 2, 200000, 14000);
|
||||
addRow(sheet, 3, 300000, 21000);
|
||||
addRow(sheet, 4, 400000, 28000);
|
||||
addRow(sheet, 5, 500000, true);
|
||||
addRow(sheet, 6, 600000, "abc");
|
||||
return wb;
|
||||
}
|
||||
|
||||
private static void confirmDouble(HSSFFormulaEvaluator fe, HSSFCell cell, String formulaText, double expectedResult) {
|
||||
cell.setCellFormula(formulaText);
|
||||
fe.notifyUpdateCell(cell);
|
||||
|
||||
@ -127,6 +127,15 @@ final class TestSumif {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testMicrosoftExample1WithBooleanAndString() throws IOException {
|
||||
try (HSSFWorkbook wb = initWorkbook1WithBooleanAndString()) {
|
||||
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
|
||||
HSSFCell cell = wb.getSheetAt(0).getRow(0).createCell(100);
|
||||
confirmDouble(fe, cell, "SUMIF(A2:A7,\">160000\",B2:B7)", 63000);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testMicrosoftExample2() throws IOException {
|
||||
try (HSSFWorkbook wb = initWorkbook2()) {
|
||||
@ -158,6 +167,14 @@ final class TestSumif {
|
||||
return wb;
|
||||
}
|
||||
|
||||
private HSSFWorkbook initWorkbook1WithBooleanAndString() {
|
||||
HSSFWorkbook wb = initWorkbook1();
|
||||
HSSFSheet sheet = wb.getSheetAt(0);
|
||||
addRow(sheet, 5, 500000, true);
|
||||
addRow(sheet, 6, 600000, "abc");
|
||||
return wb;
|
||||
}
|
||||
|
||||
private HSSFWorkbook initWorkbook2() {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet = wb.createSheet();
|
||||
|
||||
@ -5,6 +5,11 @@ import org.apache.poi.ss.usermodel.FormulaError;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
public class Utils {
|
||||
public static void addRow(Sheet sheet, int rownum, Object... values) {
|
||||
Row row = sheet.createRow(rownum);
|
||||
@ -12,6 +17,18 @@ public class Utils {
|
||||
Cell cell = row.createCell(i);
|
||||
if (values[i] instanceof Integer) {
|
||||
cell.setCellValue((Integer) values[i]);
|
||||
} else if (values[i] instanceof Double) {
|
||||
cell.setCellValue((Double) values[i]);
|
||||
} else if (values[i] instanceof Boolean) {
|
||||
cell.setCellValue((Boolean) values[i]);
|
||||
} else if (values[i] instanceof Calendar) {
|
||||
cell.setCellValue((Calendar) values[i]);
|
||||
} else if (values[i] instanceof Date) {
|
||||
cell.setCellValue((Date) values[i]);
|
||||
} else if (values[i] instanceof LocalDate) {
|
||||
cell.setCellValue((LocalDate) values[i]);
|
||||
} else if (values[i] instanceof LocalDateTime) {
|
||||
cell.setCellValue((LocalDateTime) values[i]);
|
||||
} else if (values[i] instanceof FormulaError) {
|
||||
cell.setCellErrorValue(((FormulaError)values[i]).getCode());
|
||||
} else if (values[i] == null) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user