Fix for bug 46643 - formula parser should encode range operator with tMemFunc
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@740146 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7cbc3b9067
commit
e3775b8b1d
@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
<!-- Don't forget to update status.xml too! -->
|
<!-- Don't forget to update status.xml too! -->
|
||||||
<release version="3.5-beta5" date="2008-??-??">
|
<release version="3.5-beta5" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">46643 - Fixed formula parser to encode range operator with tMemFunc</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">46647 - Fixed COUNTIF NE operator and other special cases involving type conversion</action>
|
<action dev="POI-DEVELOPERS" type="fix">46647 - Fixed COUNTIF NE operator and other special cases involving type conversion</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">46635 - Added a method to remove slides</action>
|
<action dev="POI-DEVELOPERS" type="add">46635 - Added a method to remove slides</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">46520 - Fixed HSSFFont.applyFont() to properly apply font to overlapping regions</action>
|
<action dev="POI-DEVELOPERS" type="fix">46520 - Fixed HSSFFont.applyFont() to properly apply font to overlapping regions</action>
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
<!-- Don't forget to update changes.xml too! -->
|
<!-- Don't forget to update changes.xml too! -->
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.5-beta5" date="2008-??-??">
|
<release version="3.5-beta5" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">46643 - Fixed formula parser to encode range operator with tMemFunc</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">46647 - Fixed COUNTIF NE operator and other special cases involving type conversion</action>
|
<action dev="POI-DEVELOPERS" type="fix">46647 - Fixed COUNTIF NE operator and other special cases involving type conversion</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">46635 - Added a method to remove slides</action>
|
<action dev="POI-DEVELOPERS" type="add">46635 - Added a method to remove slides</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">46520 - Fixed HSSFFont.applyFont() to properly apply font to overlapping regions</action>
|
<action dev="POI-DEVELOPERS" type="fix">46520 - Fixed HSSFFont.applyFont() to properly apply font to overlapping regions</action>
|
||||||
|
@ -344,7 +344,9 @@ public final class FormulaParser {
|
|||||||
new ParseNode(ptgA),
|
new ParseNode(ptgA),
|
||||||
new ParseNode(ptgB),
|
new ParseNode(ptgB),
|
||||||
};
|
};
|
||||||
return new ParseNode(RangePtg.instance, children);
|
ParseNode result = new ParseNode(RangePtg.instance, children);
|
||||||
|
MemFuncPtg memFuncPtg = new MemFuncPtg(result.getEncodedSize());
|
||||||
|
return new ParseNode(memFuncPtg, result);
|
||||||
}
|
}
|
||||||
return new ParseNode(simplified);
|
return new ParseNode(simplified);
|
||||||
}
|
}
|
||||||
@ -590,6 +592,10 @@ public final class FormulaParser {
|
|||||||
}
|
}
|
||||||
boolean isVarArgs = !fm.hasFixedArgsLength();
|
boolean isVarArgs = !fm.hasFixedArgsLength();
|
||||||
int funcIx = fm.getIndex();
|
int funcIx = fm.getIndex();
|
||||||
|
if (false && funcIx == 4 && args.length == 1) {
|
||||||
|
// TODO - make POI behave more like Excel when summing a single argument:
|
||||||
|
// return new ParseNode(AttrPtg.getSumSingle(), args);
|
||||||
|
}
|
||||||
validateNumArgs(args.length, fm);
|
validateNumArgs(args.length, fm);
|
||||||
|
|
||||||
AbstractFunctionPtg retval;
|
AbstractFunctionPtg retval;
|
||||||
|
@ -45,6 +45,7 @@ import org.apache.poi.hssf.record.formula.NumberPtg;
|
|||||||
import org.apache.poi.hssf.record.formula.PercentPtg;
|
import org.apache.poi.hssf.record.formula.PercentPtg;
|
||||||
import org.apache.poi.hssf.record.formula.PowerPtg;
|
import org.apache.poi.hssf.record.formula.PowerPtg;
|
||||||
import org.apache.poi.hssf.record.formula.Ptg;
|
import org.apache.poi.hssf.record.formula.Ptg;
|
||||||
|
import org.apache.poi.hssf.record.formula.RangePtg;
|
||||||
import org.apache.poi.hssf.record.formula.Ref3DPtg;
|
import org.apache.poi.hssf.record.formula.Ref3DPtg;
|
||||||
import org.apache.poi.hssf.record.formula.RefPtg;
|
import org.apache.poi.hssf.record.formula.RefPtg;
|
||||||
import org.apache.poi.hssf.record.formula.StringPtg;
|
import org.apache.poi.hssf.record.formula.StringPtg;
|
||||||
@ -973,4 +974,26 @@ public final class TestFormulaParser extends TestCase {
|
|||||||
MemFuncPtg mf = (MemFuncPtg)ptgs[0];
|
MemFuncPtg mf = (MemFuncPtg)ptgs[0];
|
||||||
assertEquals(45, mf.getLenRefSubexpression());
|
assertEquals(45, mf.getLenRefSubexpression());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testRange_bug46643() {
|
||||||
|
String formula = "Sheet1!A1:Sheet1!B3";
|
||||||
|
HSSFWorkbook wb = new HSSFWorkbook();
|
||||||
|
wb.createSheet("Sheet1");
|
||||||
|
Ptg[] ptgs = FormulaParser.parse(formula, HSSFEvaluationWorkbook.create(wb));
|
||||||
|
|
||||||
|
if (ptgs.length == 3) {
|
||||||
|
confirmTokenClasses(ptgs, new Class[] { Ref3DPtg.class, Ref3DPtg.class, RangePtg.class,});
|
||||||
|
throw new AssertionFailedError("Identified bug 46643");
|
||||||
|
}
|
||||||
|
|
||||||
|
Class [] expectedClasses = {
|
||||||
|
MemFuncPtg.class,
|
||||||
|
Ref3DPtg.class,
|
||||||
|
Ref3DPtg.class,
|
||||||
|
RangePtg.class,
|
||||||
|
};
|
||||||
|
confirmTokenClasses(ptgs, expectedClasses);
|
||||||
|
MemFuncPtg mf = (MemFuncPtg)ptgs[0];
|
||||||
|
assertEquals(15, mf.getLenRefSubexpression());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user