mirror of https://github.com/apache/poi.git
Patch from Conor from bug #57747 - Add ISERR() function
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1675741 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7393e160ba
commit
691338a8d1
|
@ -154,6 +154,7 @@ public final class FunctionEval {
|
|||
|
||||
retval[124] = TextFunction.FIND;
|
||||
|
||||
retval[126] = LogicalFunction.ISERR;
|
||||
retval[127] = LogicalFunction.ISTEXT;
|
||||
retval[128] = LogicalFunction.ISNUMBER;
|
||||
retval[129] = LogicalFunction.ISBLANK;
|
||||
|
|
|
@ -90,6 +90,27 @@ public abstract class LogicalFunction extends Fixed1ArgFunction {
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Implementation of Excel <tt>ISERR()</tt> function.<p/>
|
||||
*
|
||||
* <b>Syntax</b>:<br/>
|
||||
* <b>ISERR</b>(<b>value</b>)<p/>
|
||||
*
|
||||
* <b>value</b> The value to be tested<p/>
|
||||
*
|
||||
* Returns the logical value <tt>TRUE</tt> if value refers to any error value except
|
||||
* <tt>'#N/A'</tt>; otherwise, it returns <tt>FALSE</tt>.
|
||||
*/
|
||||
public static final Function ISERR = new LogicalFunction() {
|
||||
@Override
|
||||
protected boolean evaluate(ValueEval arg) {
|
||||
if (arg instanceof ErrorEval) {
|
||||
return arg != ErrorEval.NA;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Implementation for Excel ISNA() function.<p/>
|
||||
*
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
package org.apache.poi.ss.formula.functions;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.CellValue;
|
||||
import org.apache.poi.ss.usermodel.FormulaEvaluator;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.ss.util.CellReference;
|
||||
|
||||
/**
|
||||
* LogicalFunction unit tests.
|
||||
*/
|
||||
public class TestLogicalFunction extends TestCase {
|
||||
|
||||
private FormulaEvaluator evaluator;
|
||||
private Row row3;
|
||||
private Cell cell1;
|
||||
private Cell cell2;
|
||||
|
||||
@Override
|
||||
public void setUp() throws IOException {
|
||||
Workbook wb = new HSSFWorkbook();
|
||||
try {
|
||||
buildWorkbook(wb);
|
||||
} finally {
|
||||
wb.close();
|
||||
}
|
||||
}
|
||||
|
||||
private void buildWorkbook(Workbook wb) {
|
||||
Sheet sh = wb.createSheet();
|
||||
Row row1 = sh.createRow(0);
|
||||
Row row2 = sh.createRow(1);
|
||||
row3 = sh.createRow(2);
|
||||
|
||||
row1.createCell(0, Cell.CELL_TYPE_NUMERIC);
|
||||
row1.createCell(1, Cell.CELL_TYPE_NUMERIC);
|
||||
|
||||
row2.createCell(0, Cell.CELL_TYPE_NUMERIC);
|
||||
row2.createCell(1, Cell.CELL_TYPE_NUMERIC);
|
||||
|
||||
row3.createCell(0);
|
||||
row3.createCell(1);
|
||||
|
||||
CellReference a1 = new CellReference("A1");
|
||||
CellReference a2 = new CellReference("A2");
|
||||
CellReference b1 = new CellReference("B1");
|
||||
CellReference b2 = new CellReference("B2");
|
||||
|
||||
sh.getRow(a1.getRow()).getCell(a1.getCol()).setCellValue(35);
|
||||
sh.getRow(a2.getRow()).getCell(a2.getCol()).setCellValue(0);
|
||||
sh.getRow(b1.getRow()).getCell(b1.getCol()).setCellFormula("A1/A2");
|
||||
sh.getRow(b2.getRow()).getCell(b2.getCol()).setCellFormula("NA()");
|
||||
|
||||
evaluator = wb.getCreationHelper().createFormulaEvaluator();
|
||||
}
|
||||
|
||||
public void testIsErr() {
|
||||
cell1 = row3.createCell(0);
|
||||
cell1.setCellFormula("ISERR(B1)"); // produces #DIV/0!
|
||||
cell2 = row3.createCell(1);
|
||||
cell2.setCellFormula("ISERR(B2)"); // produces #N/A
|
||||
|
||||
CellValue cell1Value = evaluator.evaluate(cell1);
|
||||
CellValue cell2Value = evaluator.evaluate(cell2);
|
||||
|
||||
assertEquals(true, cell1Value.getBooleanValue());
|
||||
assertEquals(false, cell2Value.getBooleanValue());
|
||||
}
|
||||
|
||||
public void testIsError() {
|
||||
cell1 = row3.createCell(0);
|
||||
cell1.setCellFormula("ISERROR(B1)"); // produces #DIV/0!
|
||||
cell2 = row3.createCell(1);
|
||||
cell2.setCellFormula("ISERROR(B2)"); // produces #N/A
|
||||
|
||||
CellValue cell1Value = evaluator.evaluate(cell1);
|
||||
CellValue cell2Value = evaluator.evaluate(cell2);
|
||||
|
||||
assertEquals(true, cell1Value.getBooleanValue());
|
||||
assertEquals(true, cell2Value.getBooleanValue());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue