bug 58339: patch from Patrick Zimmermann to allow OFFSET() to accept missing optional width or height parameters

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1730606 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Javen O'Neal 2016-02-15 20:27:59 +00:00
parent 4aeff3f0ac
commit 3cb72bfa7b
3 changed files with 9 additions and 2 deletions

View File

@ -20,6 +20,7 @@ package org.apache.poi.ss.formula.functions;
import org.apache.poi.ss.formula.eval.AreaEval;
import org.apache.poi.ss.formula.eval.ErrorEval;
import org.apache.poi.ss.formula.eval.EvaluationException;
import org.apache.poi.ss.formula.eval.MissingArgEval;
import org.apache.poi.ss.formula.eval.OperandResolver;
import org.apache.poi.ss.formula.eval.RefEval;
import org.apache.poi.ss.formula.eval.ValueEval;
@ -171,11 +172,17 @@ public final class Offset implements Function {
int columnOffset = evaluateIntArg(args[2], srcCellRow, srcCellCol);
int height = baseRef.getHeight();
int width = baseRef.getWidth();
// optional arguments
// If height or width is omitted, it is assumed to be the same height or width as reference.
switch(args.length) {
case 5:
width = evaluateIntArg(args[4], srcCellRow, srcCellCol);
if(!(args[4] instanceof MissingArgEval)) {
width = evaluateIntArg(args[4], srcCellRow, srcCellCol);
}
case 4:
height = evaluateIntArg(args[3], srcCellRow, srcCellCol);
if(!(args[3] instanceof MissingArgEval)) {
height = evaluateIntArg(args[3], srcCellRow, srcCellCol);
}
}
// Zero height or width raises #REF! error
if(height == 0 || width == 0) {