From 8c3aab6349d454b869d96e4c350d21020c60cbdb Mon Sep 17 00:00:00 2001 From: Josh Micich Date: Thu, 3 Jul 2008 23:09:08 +0000 Subject: [PATCH] Fix for bug 45334 - added impl for ERROR.TYPE() git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@673863 13f79535-47bb-0310-9956-ffa450edef68 --- .../record/formula/functions/Errortype.java | 95 ++++++++++++++---- .../poi/hssf/data/FormulaEvalTestData.xls | Bin 136704 -> 137216 bytes 2 files changed, 74 insertions(+), 21 deletions(-) diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java b/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java index 51268c9aa0..dd72eb5c79 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java @@ -1,25 +1,78 @@ -/* -* 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. -*/ -/* - * Created on May 15, 2005 - * - */ +/* ==================================================================== + 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; -public class Errortype extends NotImplementedFunction { +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.NumberEval; +import org.apache.poi.hssf.record.formula.eval.OperandResolver; +import org.apache.poi.hssf.usermodel.HSSFErrorConstants; + +/** + * Implementation for the ERROR.TYPE() Excel function.

+ * + * Syntax:
+ * ERROR.TYPE(errorValue)

+ * + * Returns a number corresponding to the error type of the supplied argument.

+ * + * + * + * + * + * + * + * + * + * + * + *
errorValueReturn Value
#NULL!1
#DIV/0!2
#VALUE!3
#REF!4
#NAME?5
#NUM!6
#N/A!7
everything else#N/A!
+ * + * Note - the results of ERROR.TYPE() are different to the constants defined in + * HSSFErrorConstants. + * + * @author Josh Micich + */ +public final class Errortype implements Function { + + public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + + try { + OperandResolver.getSingleValue(args[0], srcCellRow, srcCellCol); + return ErrorEval.NA; + } catch (EvaluationException e) { + int result = translateErrorCodeToErrorTypeValue(e.getErrorEval().getErrorCode()); + return new NumberEval(result); + } + } + + private int translateErrorCodeToErrorTypeValue(int errorCode) { + switch (errorCode) { + case HSSFErrorConstants.ERROR_NULL: return 1; + case HSSFErrorConstants.ERROR_DIV_0: return 2; + case HSSFErrorConstants.ERROR_VALUE: return 3; + case HSSFErrorConstants.ERROR_REF: return 4; + case HSSFErrorConstants.ERROR_NAME: return 5; + case HSSFErrorConstants.ERROR_NUM: return 6; + case HSSFErrorConstants.ERROR_NA : return 7; + } + throw new IllegalArgumentException("Invalid error code (" + errorCode + ")"); + } } diff --git a/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls b/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls index ce94050789f600447ede6c710dd38492496b5e5e..7be92c5fa43389d199e7ad4e75b75e1c7a2043f7 100644 GIT binary patch delta 23768 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 avrcVKwoh9p-%K85telb^DXQ%$(*7TUMuNxy delta 23374 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 PEuV=U7VMX(ZP5Q8q~)nI -- 2.39.5