mirror of https://github.com/apache/poi.git
Bug 60980: Fix parsing formulas with intersections in functions args
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1854037 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
bf4396b375
commit
cafa57cbdd
|
@ -939,7 +939,7 @@ public final class FormulaParser {
|
|||
GetChar();
|
||||
}
|
||||
SkipWhite();
|
||||
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
@ -1476,7 +1476,7 @@ public final class FormulaParser {
|
|||
missedPrevArg = true;
|
||||
continue;
|
||||
}
|
||||
temp.add(comparisonExpression());
|
||||
temp.add(intersectionExpression());
|
||||
missedPrevArg = false;
|
||||
SkipWhite();
|
||||
if (!isArgumentDelimiter(look)) {
|
||||
|
|
|
@ -1279,7 +1279,42 @@ public final class TestFormulaParser {
|
|||
ParenthesisPtg.class
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// https://bz.apache.org/bugzilla/show_bug.cgi?id=60980
|
||||
@Test
|
||||
public void testIntersectionInFunctionArgs() {
|
||||
confirmTokenClasses("SUM(A1:B2 B2:C3)",
|
||||
MemAreaPtg.class,
|
||||
AreaPtg.class,
|
||||
AreaPtg.class,
|
||||
IntersectionPtg.class,
|
||||
AttrPtg.class
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIntersectionNamesInFunctionArgs() {
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
|
||||
HSSFName name1 = wb.createName();
|
||||
name1.setNameName("foo1");
|
||||
name1.setRefersToFormula("A1:A3");
|
||||
|
||||
HSSFName name2 = wb.createName();
|
||||
name2.setNameName("foo2");
|
||||
name2.setRefersToFormula("A1:B3");
|
||||
|
||||
Ptg[] ptgs = FormulaParser.parse("SUM(foo1 foo2)", HSSFEvaluationWorkbook.create(wb), FormulaType.CELL, -1);
|
||||
|
||||
confirmTokenClasses(ptgs,
|
||||
MemFuncPtg.class,
|
||||
NamePtg.class,
|
||||
NamePtg.class,
|
||||
IntersectionPtg.class,
|
||||
AttrPtg.class
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRange_bug46643() throws IOException {
|
||||
String formula = "Sheet1!A1:Sheet1!B3";
|
||||
|
|
|
@ -691,4 +691,42 @@ public abstract class BaseTestFormulaEvaluator {
|
|||
assertEquals(formula, a2.getCellFormula());
|
||||
}
|
||||
}
|
||||
|
||||
// setting an evaluation of function arguments with the intersect operator (space)
|
||||
// see https://bz.apache.org/bugzilla/show_bug.cgi?id=60980
|
||||
@Test
|
||||
public void testIntersectionInFunctionArgs_60980() throws IOException {
|
||||
Workbook wb = _testDataProvider.createWorkbook();
|
||||
FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator();
|
||||
|
||||
|
||||
Name n1 = wb.createName();
|
||||
n1.setNameName("foo");
|
||||
n1.setRefersToFormula("A4:B5");
|
||||
Name n2 = wb.createName();
|
||||
n2.setNameName("bar");
|
||||
n2.setRefersToFormula("B4:C5");
|
||||
|
||||
Sheet sheet = wb.createSheet();
|
||||
Row row3 = sheet.createRow(3);
|
||||
row3.createCell(0).setCellValue(1);
|
||||
row3.createCell(1).setCellValue(2);
|
||||
row3.createCell(2).setCellValue(3);
|
||||
Row row4 = sheet.createRow(4);
|
||||
row4.createCell(0).setCellValue(4);
|
||||
row4.createCell(1).setCellValue(5);
|
||||
row4.createCell(2).setCellValue(6);
|
||||
|
||||
Cell fmla1 = row3.createCell(4);
|
||||
fmla1.setCellFormula("SUM(A4:B5 B4:C5)");
|
||||
fe.evaluateFormulaCell(fmla1);
|
||||
assertEquals(7, fmla1.getNumericCellValue(), 0.000);
|
||||
|
||||
Cell fmla2 = row3.createCell(5);
|
||||
fmla2.setCellFormula("SUM(foo bar)");
|
||||
fe.evaluateFormulaCell(fmla2);
|
||||
assertEquals(7, fmla2.getNumericCellValue(), 0.000);
|
||||
|
||||
wb.close();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue