initial version
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@479290 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
3cad882697
commit
0bce29d37c
@ -4,10 +4,38 @@
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula.functions;
|
||||
|
||||
import org.apache.poi.hssf.record.formula.eval.BoolEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.ErrorEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.Eval;
|
||||
import org.apache.poi.hssf.record.formula.eval.RefEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.ValueEval;
|
||||
|
||||
/**
|
||||
* @author
|
||||
* @author Amol S. Deshmukh < amolweb at ya hoo dot com >
|
||||
*
|
||||
*/
|
||||
public class Islogical extends NotImplementedFunction {
|
||||
public class Islogical extends LogicalFunction {
|
||||
|
||||
public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) {
|
||||
Eval retval = BoolEval.FALSE;
|
||||
|
||||
switch (operands.length) {
|
||||
default:
|
||||
retval = ErrorEval.VALUE_INVALID;
|
||||
break;
|
||||
case 1:
|
||||
Eval eval = operands[0];
|
||||
if (eval instanceof BoolEval) {
|
||||
retval = BoolEval.TRUE;
|
||||
}
|
||||
else if (eval instanceof RefEval) {
|
||||
Eval xlatedEval = xlateRefEval((RefEval) eval);
|
||||
if (xlatedEval instanceof BoolEval) {
|
||||
retval = BoolEval.TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
@ -4,10 +4,37 @@
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula.functions;
|
||||
|
||||
import org.apache.poi.hssf.record.formula.eval.BoolEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.ErrorEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.Eval;
|
||||
import org.apache.poi.hssf.record.formula.eval.RefEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.StringEval;
|
||||
|
||||
/**
|
||||
* @author
|
||||
* @author Amol S. Deshmukh < amolweb at ya hoo dot com >
|
||||
*
|
||||
*/
|
||||
public class Isnontext extends NotImplementedFunction {
|
||||
|
||||
public class Isnontext extends LogicalFunction {
|
||||
public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) {
|
||||
Eval retval = BoolEval.TRUE;
|
||||
|
||||
switch (operands.length) {
|
||||
default:
|
||||
retval = ErrorEval.VALUE_INVALID;
|
||||
break;
|
||||
case 1:
|
||||
Eval eval = operands[0];
|
||||
if (eval instanceof StringEval) {
|
||||
retval = BoolEval.FALSE;
|
||||
}
|
||||
else if (eval instanceof RefEval) {
|
||||
Eval xlatedEval = xlateRefEval((RefEval) eval);
|
||||
if (xlatedEval instanceof StringEval) {
|
||||
retval = BoolEval.FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
@ -4,10 +4,37 @@
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula.functions;
|
||||
|
||||
import org.apache.poi.hssf.record.formula.eval.BoolEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.ErrorEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.Eval;
|
||||
import org.apache.poi.hssf.record.formula.eval.NumberEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.RefEval;
|
||||
|
||||
/**
|
||||
* @author
|
||||
* @author Amol S. Deshmukh < amolweb at ya hoo dot com >
|
||||
*
|
||||
*/
|
||||
public class Isnumber extends NotImplementedFunction {
|
||||
|
||||
public class Isnumber extends LogicalFunction {
|
||||
public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) {
|
||||
Eval retval = BoolEval.FALSE;
|
||||
|
||||
switch (operands.length) {
|
||||
default:
|
||||
retval = ErrorEval.VALUE_INVALID;
|
||||
break;
|
||||
case 1:
|
||||
Eval eval = operands[0];
|
||||
if (eval instanceof NumberEval) {
|
||||
retval = BoolEval.TRUE;
|
||||
}
|
||||
else if (eval instanceof RefEval) {
|
||||
Eval xlatedEval = xlateRefEval((RefEval) eval);
|
||||
if (xlatedEval instanceof NumberEval) {
|
||||
retval = BoolEval.TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
@ -4,10 +4,31 @@
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula.functions;
|
||||
|
||||
import org.apache.poi.hssf.record.formula.eval.AreaEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.BoolEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.ErrorEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.Eval;
|
||||
import org.apache.poi.hssf.record.formula.eval.RefEval;
|
||||
|
||||
/**
|
||||
* @author
|
||||
* @author Amol S. Deshmukh < amolweb at ya hoo dot com >
|
||||
*
|
||||
*/
|
||||
public class Isref extends NotImplementedFunction {
|
||||
|
||||
public class Isref implements Function {
|
||||
public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) {
|
||||
Eval retval = BoolEval.FALSE;
|
||||
|
||||
switch (operands.length) {
|
||||
default:
|
||||
retval = ErrorEval.VALUE_INVALID;
|
||||
break;
|
||||
case 1:
|
||||
Eval eval = operands[0];
|
||||
if (eval instanceof RefEval || eval instanceof AreaEval) {
|
||||
retval = BoolEval.TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
@ -4,10 +4,37 @@
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula.functions;
|
||||
|
||||
import org.apache.poi.hssf.record.formula.eval.BoolEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.ErrorEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.Eval;
|
||||
import org.apache.poi.hssf.record.formula.eval.RefEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.StringEval;
|
||||
|
||||
/**
|
||||
* @author
|
||||
* @author Amol S. Deshmukh < amolweb at ya hoo dot com >
|
||||
*
|
||||
*/
|
||||
public class Istext extends NotImplementedFunction {
|
||||
|
||||
public class Istext extends LogicalFunction {
|
||||
public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) {
|
||||
Eval retval = BoolEval.FALSE;
|
||||
|
||||
switch (operands.length) {
|
||||
default:
|
||||
retval = ErrorEval.VALUE_INVALID;
|
||||
break;
|
||||
case 1:
|
||||
Eval eval = operands[0];
|
||||
if (eval instanceof StringEval) {
|
||||
retval = BoolEval.TRUE;
|
||||
}
|
||||
else if (eval instanceof RefEval) {
|
||||
Eval xlatedEval = xlateRefEval((RefEval) eval);
|
||||
if (xlatedEval instanceof StringEval) {
|
||||
retval = BoolEval.TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
@ -4,10 +4,88 @@
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula.functions;
|
||||
|
||||
import org.apache.poi.hssf.record.formula.eval.BoolEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.ErrorEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.Eval;
|
||||
import org.apache.poi.hssf.record.formula.eval.NumberEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.RefEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.StringEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.ValueEval;
|
||||
|
||||
/**
|
||||
* @author
|
||||
* @author Amol S. Deshmukh < amolweb at ya hoo dot com >
|
||||
*
|
||||
*/
|
||||
public class Left extends NotImplementedFunction {
|
||||
public class Left extends TextFunction {
|
||||
|
||||
public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) {
|
||||
Eval retval = ErrorEval.VALUE_INVALID;
|
||||
int index = 1;
|
||||
switch (operands.length) {
|
||||
default:
|
||||
break;
|
||||
case 2:
|
||||
Eval indexEval = operands[1];
|
||||
index = evaluateAsInteger(indexEval);
|
||||
if (index < 0) {
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
ValueEval veval = singleOperandEvaluate(operands[0], srcCellRow, srcCellCol);
|
||||
String str = null;
|
||||
if (veval instanceof StringEval) {
|
||||
StringEval stringEval = (StringEval) veval;
|
||||
str = stringEval.getStringValue();
|
||||
}
|
||||
else if (veval instanceof BoolEval) {
|
||||
BoolEval beval = (BoolEval) veval;
|
||||
str = beval.getBooleanValue() ? "TRUE" : "FALSE";
|
||||
}
|
||||
else if (veval instanceof NumberEval) {
|
||||
NumberEval neval = (NumberEval) veval;
|
||||
str = neval.getStringValue();
|
||||
}
|
||||
if (null != str) {
|
||||
str = str.substring(0, Math.min(str.length(), index));
|
||||
retval = new StringEval(str);
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
protected int evaluateAsInteger(Eval eval) {
|
||||
int numval = -1;
|
||||
if (eval instanceof NumberEval) {
|
||||
NumberEval neval = (NumberEval) eval;
|
||||
double d = neval.getNumberValue();
|
||||
numval = (int) d;
|
||||
}
|
||||
else if (eval instanceof StringEval) {
|
||||
StringEval seval = (StringEval) eval;
|
||||
String s = seval.getStringValue();
|
||||
try {
|
||||
double d = Double.parseDouble(s);
|
||||
numval = (int) d;
|
||||
}
|
||||
catch (Exception e) {
|
||||
}
|
||||
}
|
||||
else if (eval instanceof BoolEval) {
|
||||
BoolEval beval = (BoolEval) eval;
|
||||
numval = beval.getBooleanValue() ? 1 : 0;
|
||||
}
|
||||
else if (eval instanceof RefEval) {
|
||||
numval = evaluateAsInteger(xlateRefEval((RefEval) eval));
|
||||
}
|
||||
return numval;
|
||||
}
|
||||
|
||||
protected Eval xlateRefEval(RefEval reval) {
|
||||
Eval retval = reval.getInnerValueEval();
|
||||
|
||||
if (retval instanceof RefEval) {
|
||||
retval = xlateRefEval((RefEval) retval);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
@ -4,10 +4,89 @@
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula.functions;
|
||||
|
||||
import org.apache.poi.hssf.record.formula.eval.BoolEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.ErrorEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.Eval;
|
||||
import org.apache.poi.hssf.record.formula.eval.NumberEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.RefEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.StringEval;
|
||||
import org.apache.poi.hssf.record.formula.eval.ValueEval;
|
||||
|
||||
/**
|
||||
* @author
|
||||
* @author Amol S. Deshmukh < amolweb at ya hoo dot com >
|
||||
*
|
||||
*/
|
||||
public class Right extends NotImplementedFunction {
|
||||
public class Right extends TextFunction {
|
||||
|
||||
public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) {
|
||||
Eval retval = ErrorEval.VALUE_INVALID;
|
||||
int index = 1;
|
||||
switch (operands.length) {
|
||||
default:
|
||||
break;
|
||||
case 2:
|
||||
Eval indexEval = operands[1];
|
||||
index = evaluateAsInteger(indexEval);
|
||||
if (index < 0) {
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
ValueEval veval = singleOperandEvaluate(operands[0], srcCellRow, srcCellCol);
|
||||
String str = null;
|
||||
if (veval instanceof StringEval) {
|
||||
StringEval stringEval = (StringEval) veval;
|
||||
str = stringEval.getStringValue();
|
||||
}
|
||||
else if (veval instanceof BoolEval) {
|
||||
BoolEval beval = (BoolEval) veval;
|
||||
str = beval.getBooleanValue() ? "TRUE" : "FALSE";
|
||||
}
|
||||
else if (veval instanceof NumberEval) {
|
||||
NumberEval neval = (NumberEval) veval;
|
||||
str = neval.getStringValue();
|
||||
}
|
||||
if (null != str) {
|
||||
int strlen = str.length();
|
||||
str = str.substring(Math.max(0, strlen-index));
|
||||
retval = new StringEval(str);
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
protected int evaluateAsInteger(Eval eval) {
|
||||
int numval = -1;
|
||||
if (eval instanceof NumberEval) {
|
||||
NumberEval neval = (NumberEval) eval;
|
||||
double d = neval.getNumberValue();
|
||||
numval = (int) d;
|
||||
}
|
||||
else if (eval instanceof StringEval) {
|
||||
StringEval seval = (StringEval) eval;
|
||||
String s = seval.getStringValue();
|
||||
try {
|
||||
double d = Double.parseDouble(s);
|
||||
numval = (int) d;
|
||||
}
|
||||
catch (Exception e) {
|
||||
}
|
||||
}
|
||||
else if (eval instanceof BoolEval) {
|
||||
BoolEval beval = (BoolEval) eval;
|
||||
numval = beval.getBooleanValue() ? 1 : 0;
|
||||
}
|
||||
else if (eval instanceof RefEval) {
|
||||
numval = evaluateAsInteger(xlateRefEval((RefEval) eval));
|
||||
}
|
||||
return numval;
|
||||
}
|
||||
|
||||
protected Eval xlateRefEval(RefEval reval) {
|
||||
Eval retval = reval.getInnerValueEval();
|
||||
|
||||
if (retval instanceof RefEval) {
|
||||
retval = xlateRefEval((RefEval) retval);
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user