You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2013/08/16 20:13:41 UTC

svn commit: r1514830 - in /poi/trunk: src/java/org/apache/poi/ss/formula/atp/ src/java/org/apache/poi/ss/formula/functions/ src/testcases/org/apache/poi/ss/formula/functions/ test-data/spreadsheet/

Author: cedricwalter
Date: Fri Aug 16 18:13:40 2013
New Revision: 1514830

URL: http://svn.apache.org/r1514830
Log:
Bug 55080: patch for missing function IMREAL

Added:
    poi/trunk/src/java/org/apache/poi/ss/formula/functions/ImReal.java
    poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestImRealFunctionsFromSpreadsheet.java
    poi/trunk/test-data/spreadsheet/ImRealFunctionTestCaseData.xls   (with props)
Modified:
    poi/trunk/src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java
    poi/trunk/test-data/spreadsheet/FormulaEvalTestData.xls

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java?rev=1514830&r1=1514829&r2=1514830&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java Fri Aug 16 18:13:40 2013
@@ -123,7 +123,7 @@ public final class AnalysisToolPak imple
         r(m, "IMLOG2", null);
         r(m, "IMPOWER", null);
         r(m, "IMPRODUCT", null);
-        r(m, "IMREAL", null);
+        r(m, "IMREAL", ImReal.instance);
         r(m, "IMSIN", null);
         r(m, "IMSQRT", null);
         r(m, "IMSUB", null);

Added: poi/trunk/src/java/org/apache/poi/ss/formula/functions/ImReal.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/functions/ImReal.java?rev=1514830&view=auto
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/functions/ImReal.java (added)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/functions/ImReal.java Fri Aug 16 18:13:40 2013
@@ -0,0 +1,95 @@
+/* ====================================================================
+   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.ss.formula.functions;
+
+import org.apache.poi.ss.formula.OperationEvaluationContext;
+import org.apache.poi.ss.formula.eval.*;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Implementation for Excel ImReal() function.<p/>
+ * <p/>
+ * <b>Syntax</b>:<br/> <b>ImReal  </b>(<b>Inumber</b>)<br/>
+ * <p/>
+ * Returns the real coefficient of a complex number in x + yi or x + yj text format.
+ * <p/>
+ * Inumber     A complex number for which you want the real coefficient.
+ * <p/>
+ * Remarks
+ * <ul>
+ * <li>If inumber is not in the form x + yi or x + yj, this function returns the #NUM! error value.</li>
+ * <li>Use COMPLEX to convert real and imaginary coefficients into a complex number.</li>
+ * </ul>
+ *
+ * @author cedric dot walter @ gmail dot com
+ */
+public class ImReal extends Fixed1ArgFunction implements FreeRefFunction {
+
+    public static final FreeRefFunction instance = new ImReal();
+
+    public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval inumberVE) {
+        ValueEval veText1;
+        try {
+            veText1 = OperandResolver.getSingleValue(inumberVE, srcRowIndex, srcColumnIndex);
+        } catch (EvaluationException e) {
+            return e.getErrorEval();
+        }
+        String iNumber = OperandResolver.coerceValueToString(veText1);
+
+        Matcher m = Imaginary.COMPLEX_NUMBER_PATTERN.matcher(iNumber);
+        boolean result = m.matches();
+
+        String real = "";
+        if (result == true) {
+            String realGroup = m.group(2);
+            boolean hasRealPart = realGroup.length() != 0;
+
+            if (realGroup.length() == 0) {
+                return new StringEval(String.valueOf(0));
+            }
+
+            if (hasRealPart) {
+                String sign = "";
+                String realSign = m.group(Imaginary.GROUP1_REAL_SIGN);
+                if (realSign.length() != 0 && !(realSign.equals("+"))) {
+                    sign = realSign;
+                }
+
+                String groupRealNumber = m.group(Imaginary.GROUP2_IMAGINARY_INTEGER_OR_DOUBLE);
+                if (groupRealNumber.length() != 0) {
+                    real = sign + groupRealNumber;
+                } else {
+                    real = sign + "1";
+                }
+            }
+        } else {
+            return ErrorEval.NUM_ERROR;
+        }
+
+        return new StringEval(real);
+    }
+
+    public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
+        if (args.length != 1) {
+            return ErrorEval.VALUE_INVALID;
+        }
+        return evaluate(ec.getRowIndex(), ec.getColumnIndex(), args[0]);
+    }
+}

Added: poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestImRealFunctionsFromSpreadsheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestImRealFunctionsFromSpreadsheet.java?rev=1514830&view=auto
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestImRealFunctionsFromSpreadsheet.java (added)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestImRealFunctionsFromSpreadsheet.java Fri Aug 16 18:13:40 2013
@@ -0,0 +1,30 @@
+/* ====================================================================
+   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.ss.formula.functions;
+
+/**
+ * Tests ImReal() as loaded from a test data spreadsheet.<p/>
+ *
+ * @author cedric dot walter @ gmail dot com
+ */
+public class TestImRealFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
+
+    protected String getFilename() {
+        return "ImRealFunctionTestCaseData.xls";
+    }
+}

Modified: poi/trunk/test-data/spreadsheet/FormulaEvalTestData.xls
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/FormulaEvalTestData.xls?rev=1514830&r1=1514829&r2=1514830&view=diff
==============================================================================
Binary files - no diff available.

Added: poi/trunk/test-data/spreadsheet/ImRealFunctionTestCaseData.xls
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/ImRealFunctionTestCaseData.xls?rev=1514830&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/spreadsheet/ImRealFunctionTestCaseData.xls
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



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