You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2021/11/25 05:07:01 UTC

svn commit: r1895312 - in /poi/trunk/poi/src: main/java/org/apache/poi/ss/usermodel/DataFormatter.java test/java/org/apache/poi/ss/usermodel/TestDataFormatter.java

Author: fanningpj
Date: Thu Nov 25 05:07:01 2021
New Revision: 1895312

URL: http://svn.apache.org/viewvc?rev=1895312&view=rev
Log:
[bug-63211] fix issue with escaped % in custom number format

Modified:
    poi/trunk/poi/src/main/java/org/apache/poi/ss/usermodel/DataFormatter.java
    poi/trunk/poi/src/test/java/org/apache/poi/ss/usermodel/TestDataFormatter.java

Modified: poi/trunk/poi/src/main/java/org/apache/poi/ss/usermodel/DataFormatter.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/usermodel/DataFormatter.java?rev=1895312&r1=1895311&r2=1895312&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/usermodel/DataFormatter.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/usermodel/DataFormatter.java Thu Nov 25 05:07:01 2021
@@ -313,7 +313,8 @@ public class DataFormatter {
         // int i = cellValue > 0.0 ? 0 : cellValue < 0.0 ? 1 : 2;
         // String formatStr = (i < formatBits.length) ? formatBits[i] : formatBits[0];
 
-        String formatStr = formatStrIn;
+        // this replace is done to fix https://bz.apache.org/bugzilla/show_bug.cgi?id=63211
+        String formatStr = formatStrIn.replace("\\%", "\'%\'");
 
         // Excel supports 2+ part conditional data formats, eg positive/negative/zero,
         //  or (>1000),(>0),(0),(negative). As Java doesn't handle these kinds

Modified: poi/trunk/poi/src/test/java/org/apache/poi/ss/usermodel/TestDataFormatter.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/usermodel/TestDataFormatter.java?rev=1895312&r1=1895311&r2=1895312&view=diff
==============================================================================
--- poi/trunk/poi/src/test/java/org/apache/poi/ss/usermodel/TestDataFormatter.java (original)
+++ poi/trunk/poi/src/test/java/org/apache/poi/ss/usermodel/TestDataFormatter.java Thu Nov 25 05:07:01 2021
@@ -1020,6 +1020,18 @@ class TestDataFormatter {
 
     }
 
+    @Test
+    void bug63211() {
+        DataFormatter formatter = new DataFormatter();
+        // https://bz.apache.org/bugzilla/show_bug.cgi?id=63211
+        // this format is an escaped % so is not the built-in percent which treats 0.125 as 12.5%
+        // this escaped format just appends a % to the raw decimal - so 12.5 becomes 12.5%
+        assertEquals("12.5%",
+                formatter.formatRawCellContents(12.5, -1, "0.0\\%;\\-0.0\\%"));
+        assertEquals("-12.5%",
+                formatter.formatRawCellContents(-12.5, -1, "0.0\\%;\\-0.0\\%"));
+    }
+
     private void doFormatTestSequential(DataFormatter formatter) {
         for (int i = 0; i < 1_000; i++) {
             assertTrue(doFormatTest(formatter, 43551.50990171296, "3/27/19 12:14:15 PM", i));



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