You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2015/04/24 03:47:20 UTC

svn commit: r1675741 - in /poi/trunk/src: java/org/apache/poi/ss/formula/eval/FunctionEval.java java/org/apache/poi/ss/formula/functions/LogicalFunction.java testcases/org/apache/poi/ss/formula/functions/TestLogicalFunction.java

Author: nick
Date: Fri Apr 24 01:47:20 2015
New Revision: 1675741

URL: http://svn.apache.org/r1675741
Log:
Patch from Conor from bug #57747 - Add ISERR() function

Added:
    poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestLogicalFunction.java
Modified:
    poi/trunk/src/java/org/apache/poi/ss/formula/eval/FunctionEval.java
    poi/trunk/src/java/org/apache/poi/ss/formula/functions/LogicalFunction.java

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/eval/FunctionEval.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/eval/FunctionEval.java?rev=1675741&r1=1675740&r2=1675741&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/eval/FunctionEval.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/eval/FunctionEval.java Fri Apr 24 01:47:20 2015
@@ -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;

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/functions/LogicalFunction.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/functions/LogicalFunction.java?rev=1675741&r1=1675740&r2=1675741&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/functions/LogicalFunction.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/functions/LogicalFunction.java Fri Apr 24 01:47:20 2015
@@ -90,6 +90,27 @@ public abstract class LogicalFunction ex
 		}
 	};
 
+    /**
+     * 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/>
 	 *

Added: poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestLogicalFunction.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestLogicalFunction.java?rev=1675741&view=auto
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestLogicalFunction.java (added)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestLogicalFunction.java Fri Apr 24 01:47:20 2015
@@ -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());
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org