diff options
author | Yegor Kozlov <yegor@apache.org> | 2009-04-18 07:12:38 +0000 |
---|---|---|
committer | Yegor Kozlov <yegor@apache.org> | 2009-04-18 07:12:38 +0000 |
commit | 46b06af35a59c1bb1ce4ee91d32106ab124287b0 (patch) | |
tree | 36d6797927f334518b42b3d8deb5cdab8da16ed5 /src/java/org/apache/poi/ss | |
parent | 9eff4e10b36d171ed5a33771066b779604897aff (diff) | |
download | poi-46b06af35a59c1bb1ce4ee91d32106ab124287b0.tar.gz poi-46b06af35a59c1bb1ce4ee91d32106ab124287b0.zip |
Allow 255 arguments for excel functions in XSSF, see bugzilla 46279
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@766251 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/poi/ss')
-rw-r--r-- | src/java/org/apache/poi/ss/formula/FormulaParser.java | 16 | ||||
-rw-r--r-- | src/java/org/apache/poi/ss/formula/FormulaParsingWorkbook.java | 8 |
2 files changed, 20 insertions, 4 deletions
diff --git a/src/java/org/apache/poi/ss/formula/FormulaParser.java b/src/java/org/apache/poi/ss/formula/FormulaParser.java index 8311a17c44..d36793be93 100644 --- a/src/java/org/apache/poi/ss/formula/FormulaParser.java +++ b/src/java/org/apache/poi/ss/formula/FormulaParser.java @@ -31,6 +31,7 @@ import org.apache.poi.hssf.usermodel.HSSFErrorConstants; import org.apache.poi.ss.util.AreaReference; import org.apache.poi.ss.util.CellReference; import org.apache.poi.ss.util.CellReference.NameType; +import org.apache.poi.ss.SpreadsheetVersion; /** * This class parses a formula string into a List of tokens in RPN order. @@ -982,13 +983,20 @@ public final class FormulaParser { } msg += " but got " + numArgs + "."; throw new FormulaParseException(msg); - } - if(numArgs > fm.getMaxParams()) { + } + //the maximum number of arguments depends on the Excel version + int maxArgs = fm.getMaxParams(); + if( maxArgs == FunctionMetadataRegistry.FUNCTION_MAX_PARAMS) { + //_book can be omitted by test cases + if(_book != null) maxArgs = _book.getSpreadsheetVersion().getMaxFunctionArgs(); + } + + if(numArgs > maxArgs) { String msg = "Too many arguments to function '" + fm.getName() + "'. "; if(fm.hasFixedArgsLength()) { - msg += "Expected " + fm.getMaxParams(); + msg += "Expected " + maxArgs; } else { - msg += "At most " + fm.getMaxParams() + " were expected"; + msg += "At most " + maxArgs + " were expected"; } msg += " but got " + numArgs + "."; throw new FormulaParseException(msg); diff --git a/src/java/org/apache/poi/ss/formula/FormulaParsingWorkbook.java b/src/java/org/apache/poi/ss/formula/FormulaParsingWorkbook.java index 57f0f7a2c4..2ecd69be9a 100644 --- a/src/java/org/apache/poi/ss/formula/FormulaParsingWorkbook.java +++ b/src/java/org/apache/poi/ss/formula/FormulaParsingWorkbook.java @@ -18,6 +18,7 @@ package org.apache.poi.ss.formula;
import org.apache.poi.hssf.record.formula.NameXPtg;
+import org.apache.poi.ss.SpreadsheetVersion;
/**
* Abstracts a workbook for the purpose of formula parsing.<br/>
@@ -44,4 +45,11 @@ public interface FormulaParsingWorkbook { * @param sheetName a name of a sheet in that workbook
*/
int getExternalSheetIndex(String workbookName, String sheetName);
+
+ /**
+ * Returns an enum holding spreadhseet properties specific to an Excel version (
+ * max column and row numbers, max arguments to a function, etc.)
+ */
+ SpreadsheetVersion getSpreadsheetVersion();
+
}
|