Author: centic
Date: Sat Jan 11 09:23:55 2025
New Revision: 1923056
URL: http://svn.apache.org/viewvc?rev=1923056&view=rev
Log:
Bug 65190: Handle decimal format '0#' the same way as Excel
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=1923056&r1=1923055&r2=1923056&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
Sat Jan 11 09:23:55 2025
@@ -163,6 +163,11 @@ public class DataFormatter {
private static final Pattern alternateGrouping =
Pattern.compile("([#0]([^.#0])[#0]{3})");
/**
+ * For handling '0#' properly
+ */
+ private static final Pattern decimalFormatFix = Pattern.compile("0+#");
+
+ /**
* Cells formatted with a date or time format and which contain invalid
date or time values
* show 255 pound signs ("#").
*/
@@ -850,6 +855,11 @@ public class DataFormatter {
}
}
+ // Excel ignores leading zeros, but Java fails with an exception below
+ if (decimalFormatFix.matcher(format).matches()) {
+ format = "#";
+ }
+
try {
return new InternalDecimalFormatWithScale(format, symbols);
} catch(IllegalArgumentException iae) {
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=1923056&r1=1923055&r2=1923056&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
Sat Jan 11 09:23:55 2025
@@ -1207,4 +1207,27 @@ class TestDataFormatter {
assertEquals("25571.751069247686", df.formatCellValue(cell));*/
}
}
+
+ @Test
+ void testBug65190() {
+ DataFormatter formatter = new DataFormatter(Locale.ENGLISH);
+
+ assertEquals("12334567890",
+ formatter.formatRawCellContents(12334567890.0, 0, "0"));
+ assertEquals("12334567890",
+ formatter.formatRawCellContents(12334567890.0, 0, "#"));
+ assertEquals("12334567890",
+ formatter.formatRawCellContents(12334567890.0, 0, "#0"));
+ assertEquals("12334567890",
+ formatter.formatRawCellContents(12334567890.0, 0, "0#"));
+
+ assertEquals("12334567890123",
+ formatter.formatRawCellContents(12334567890123.0, 0, "0"));
+ assertEquals("12334567890123",
+ formatter.formatRawCellContents(12334567890123.0, 0, "#"));
+ assertEquals("12334567890123",
+ formatter.formatRawCellContents(12334567890123.0, 0, "#0"));
+ assertEquals("12334567890123",
+ formatter.formatRawCellContents(12334567890123.0, 0, "0#"));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]