aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/poi/ss
diff options
context:
space:
mode:
authorYegor Kozlov <yegor@apache.org>2009-04-18 07:12:38 +0000
committerYegor Kozlov <yegor@apache.org>2009-04-18 07:12:38 +0000
commit46b06af35a59c1bb1ce4ee91d32106ab124287b0 (patch)
tree36d6797927f334518b42b3d8deb5cdab8da16ed5 /src/java/org/apache/poi/ss
parent9eff4e10b36d171ed5a33771066b779604897aff (diff)
downloadpoi-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.java16
-rw-r--r--src/java/org/apache/poi/ss/formula/FormulaParsingWorkbook.java8
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();
+
}