From 07bff0902a68173cc808e4088ef4e707770b1ff4 Mon Sep 17 00:00:00 2001 From: Josh Micich Date: Fri, 19 Jun 2009 22:42:39 +0000 Subject: [PATCH] Added implementation for ISNA() git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@786696 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 9 +-- .../record/formula/eval/FunctionEval.java | 2 +- .../hssf/record/formula/functions/IsNa.java | 56 ++++++++++++++++++ .../poi/hssf/data/FormulaEvalTestData.xls | Bin 157184 -> 157696 bytes 4 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 src/java/org/apache/poi/hssf/record/formula/functions/IsNa.java diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 2357a1709..9e8e2a6a3 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -33,6 +33,7 @@ + Added implementation for ISNA() 46793 - fixed SimpleShape#getLineWidth to handle default line width 47356 - removed unused private fields in HWPF BorderCode 47355 - Improved HWPF TableCell to expose TableCellDescriptor @@ -319,7 +320,7 @@ 44937 - Partial support for extracting Escher images from HWPF files 44824 - Avoid an infinite loop when reading some HWPF pictures 44898 - Correctly handle short last blocks in POIFS - + 44306 - fixed reading/writing of AttrPtg(type=choose) and method toFormulaString() for CHOOSE formulas 24207 - added HSSFName.isDeleted() to check if the name points to cell that no longer exists @@ -523,14 +524,14 @@ Image writing support HSLF - Initial PowerPoint Support. Includes: Support for text extraction across the whole file; Support for getting individual slides, and their notes, and extracting text from those; Initial support for changing (but not adding) text - + Outlining support 27574 - [PATCH] HSSFDateUtil.getExcelDate() is one hour off when DST changes 26465 - [PATCH] wrong lastrow entry 28203 - [PATCH] Unable to open read-write excel file including forms - + Add support for the Escher file format 27005 java.lang.IndexOutOfBoundsException during Workbook.cloneSheet() @@ -539,7 +540,7 @@ No changes - + Bug 25695 - HSSFCell.getStringCellValue() on cell which has string formula will return swap bye unicode characters. Updated website for upcoming release diff --git a/src/java/org/apache/poi/hssf/record/formula/eval/FunctionEval.java b/src/java/org/apache/poi/hssf/record/formula/eval/FunctionEval.java index ef7f39a6b..3b74cc9a9 100644 --- a/src/java/org/apache/poi/hssf/record/formula/eval/FunctionEval.java +++ b/src/java/org/apache/poi/hssf/record/formula/eval/FunctionEval.java @@ -26,7 +26,6 @@ import org.apache.poi.hssf.record.formula.functions.*; /** * @author Amol S. Deshmukh < amolweb at ya hoo dot com > - * */ public abstract class FunctionEval implements OperationEval { /** @@ -79,6 +78,7 @@ public abstract class FunctionEval implements OperationEval { retval[0] = new Count(); retval[1] = new If(); + retval[2] = new IsNa(); retval[3] = new IsError(); retval[ID.SUM] = AggregateFunction.SUM; diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/IsNa.java b/src/java/org/apache/poi/hssf/record/formula/functions/IsNa.java new file mode 100644 index 000000000..0c9cf4f20 --- /dev/null +++ b/src/java/org/apache/poi/hssf/record/formula/functions/IsNa.java @@ -0,0 +1,56 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +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.EvaluationException; +import org.apache.poi.hssf.record.formula.eval.OperandResolver; +import org.apache.poi.ss.usermodel.ErrorConstants; + +/** + * Implementation for Excel ISNA() function.

+ * + * Syntax:
+ * ISNA(value)

+ * + * value The value to be tested
+ *
+ * Returns TRUE if the specified value is '#N/A', FALSE otherwise. + * + * @author Josh Micich + */ +public final class IsNa implements Function { + + public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + if(args.length != 1) { + return ErrorEval.VALUE_INVALID; + } + Eval arg = args[0]; + + try { + OperandResolver.getSingleValue(arg, srcCellRow, srcCellCol); + } catch (EvaluationException e) { + if (e.getErrorEval().getErrorCode() == ErrorConstants.ERROR_NA) { + return BoolEval.TRUE; + } + } + return BoolEval.FALSE; + } +} diff --git a/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls b/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls index 8bd07c2f341470ddc8d46941c6606ac02770e61e..f91091ad25fbfe466fef472ea217cee427a2bac9 100644 GIT binary patch delta 3443 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 L(eM+pq&fM2U}`=^ delta 3145 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