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/10/11 21:16:44 UTC

svn commit: r1531395 - in /poi/trunk: src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java src/java/org/apache/poi/ss/formula/functions/Dec2Hex.java test-data/spreadsheet/FormulaEvalTestData.xls

Author: cedricwalter
Date: Fri Oct 11 19:16:43 2013
New Revision: 1531395

URL: http://svn.apache.org/r1531395
Log:
Bug 55036: patch for missing function Dec2HEx

Modified:
    poi/trunk/src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java
    poi/trunk/src/java/org/apache/poi/ss/formula/functions/Dec2Hex.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=1531395&r1=1531394&r2=1531395&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 Oct 11 19:16:43 2013
@@ -89,7 +89,7 @@ public final class AnalysisToolPak imple
         r(m, "CUMIPMT", null);
         r(m, "CUMPRINC", null);
         r(m, "DEC2BIN", Dec2Bin.instance);
-        r(m, "DEC2HEX", null);
+        r(m, "DEC2HEX", Dec2Hex.instance);
         r(m, "DEC2OCT", null);
         r(m, "DELTA", Delta.instance);
         r(m, "DISC", null);

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/functions/Dec2Hex.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/functions/Dec2Hex.java?rev=1531395&r1=1531394&r2=1531395&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/functions/Dec2Hex.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/functions/Dec2Hex.java Fri Oct 11 19:16:43 2013
@@ -45,7 +45,7 @@ import org.apache.poi.ss.formula.eval.*;
  * <ul>
  * <li>If this argument is omitted, this function uses the minimum number of characters necessary.</li>
  * <li>If this function requires more than places characters, it returns the #NUM! error value.</li>
- * <li>If this argument is nonnumeric, this function returns the #VALUE! error value.</li>
+ * <li>If this argument is non numeric, this function returns the #VALUE! error value.</li>
  * <li>If this argument is negative, this function returns the #NUM! error value.</li>
  * <li>If this argument contains a decimal value, this function ignores the numbers to the right side of the decimal point.</li>
  * </ul>
@@ -54,9 +54,11 @@ import org.apache.poi.ss.formula.eval.*;
  */
 public final class Dec2Hex extends Var1or2ArgFunction implements FreeRefFunction {
 
-    private final static long MIN_VALUE = new Long("-549755813888").longValue();
-    private final static long MAX_VALUE = new Long("549755813887").longValue();
-    private final static int DEFAULT_PLACES_VALUE = 10;;
+    public static final FreeRefFunction instance = new Dec2Hex();
+
+    private final static long MIN_VALUE = Long.parseLong("-549755813888");
+    private final static long MAX_VALUE = Long.parseLong("549755813887");
+    private final static int DEFAULT_PLACES_VALUE = 10;
 
     public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval number, ValueEval places) {
         ValueEval veText1;
@@ -81,7 +83,8 @@ public final class Dec2Hex extends Var1o
         int placesNumber = 0;
         if (number1 < 0) {
             placesNumber = DEFAULT_PLACES_VALUE;
-        } else  {
+        }
+        else if (places != null) {
             ValueEval placesValueEval;
             try {
                 placesValueEval = OperandResolver.getSingleValue(places, srcRowIndex, srcColumnIndex);
@@ -104,26 +107,32 @@ public final class Dec2Hex extends Var1o
             }
         }
 
-        String hex = "";
+        String hex;
         if (placesNumber != 0) {
-            hex = String.format("%0"+placesNumber+"X", number1.intValue() & 0x0FFFFF);
+            hex = String.format("%0"+placesNumber+"X", number1.intValue());
         }
         else {
             hex = Integer.toHexString(number1.intValue());
         }
 
+        if (number1 < 0) {
+            hex =  "FF"+  hex.substring(2);
+        }
+
         return new StringEval(hex.toUpperCase());
     }
 
     public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0) {
-        return this.evaluate(srcRowIndex, srcColumnIndex, arg0, new StringEval(String.valueOf(DEFAULT_PLACES_VALUE)));
+        return this.evaluate(srcRowIndex, srcColumnIndex, arg0, null);
     }
 
     public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
-        if (args.length != 2) {
-            return ErrorEval.VALUE_INVALID;
+        if (args.length == 1) {
+            return evaluate(ec.getRowIndex(), ec.getColumnIndex(), args[0]);
         }
-        return evaluate(ec.getRowIndex(), ec.getColumnIndex(), args[0], args[1]);
+        if (args.length == 2) {
+            return evaluate(ec.getRowIndex(), ec.getColumnIndex(), args[0], args[1]);
+        }
+        return ErrorEval.VALUE_INVALID;
     }
-
-}
\ No newline at end of file
+}

Modified: poi/trunk/test-data/spreadsheet/FormulaEvalTestData.xls
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/FormulaEvalTestData.xls?rev=1531395&r1=1531394&r2=1531395&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