poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j...@apache.org
Subject svn commit: r673863 - in /poi/trunk/src: java/org/apache/poi/hssf/record/formula/functions/Errortype.java testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls
Date Thu, 03 Jul 2008 23:09:08 GMT
Author: josh
Date: Thu Jul  3 16:09:08 2008
New Revision: 673863

URL: http://svn.apache.org/viewvc?rev=673863&view=rev
Log:
Fix for bug 45334 - added impl for ERROR.TYPE()

Modified:
    poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java
    poi/trunk/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java?rev=673863&r1=673862&r2=673863&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java Thu Jul
 3 16:09:08 2008
@@ -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.<p/>
+ * 
+ * <b>Syntax:</b><br/>
+ * <b>ERROR.TYPE</b>(<b>errorValue</b>)<p/>
+ * 
+ * Returns a number corresponding to the error type of the supplied argument.<p/>
+ * 
+ *    <table border="1" cellpadding="1" cellspacing="1" summary="Return values for ERROR.TYPE()">
+ *      <tr><td>errorValue</td><td>Return Value</td></tr>
+ *      <tr><td>#NULL!</td><td>1</td></tr>
+ *      <tr><td>#DIV/0!</td><td>2</td></tr>
+ *      <tr><td>#VALUE!</td><td>3</td></tr>
+ *      <tr><td>#REF!</td><td>4</td></tr>
+ *      <tr><td>#NAME?</td><td>5</td></tr>
+ *      <tr><td>#NUM!</td><td>6</td></tr>
+ *      <tr><td>#N/A!</td><td>7</td></tr>
+ *      <tr><td>everything else</td><td>#N/A!</td></tr>
+ *    </table>
+ * 
+ * Note - the results of ERROR.TYPE() are different to the constants defined in 
+ * <tt>HSSFErrorConstants</tt>.
+ * 
+ * @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 + ")");
+	}
 
 }

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls?rev=673863&r1=673862&r2=673863&view=diff
==============================================================================
Binary files - no diff available.



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


Mime
View raw message