]> source.dussan.org Git - poi.git/commitdiff
allow overridden built-in formats in XSSFCellStyle, see Bugzilla 49928
authorYegor Kozlov <yegor@apache.org>
Fri, 8 Oct 2010 08:26:57 +0000 (08:26 +0000)
committerYegor Kozlov <yegor@apache.org>
Fri, 8 Oct 2010 08:26:57 +0000 (08:26 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1005726 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataFormat.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDataFormat.java
test-data/spreadsheet/49928.xlsx [new file with mode: 0644]

index 6e78cf79b63577bf206f367dd62265beae2b8fff..00ac90736a26be3f7578b113913e69f2fe7da7e5 100644 (file)
@@ -51,8 +51,8 @@ public class XSSFDataFormat implements DataFormat {
      * @return string represented at index of format or null if there is not a  format at that index
      */
     public String getFormat(short index) {
-        String fmt = BuiltinFormats.getBuiltinFormat(index);
-        if(fmt == null) fmt = stylesSource.getNumberFormatAt(index);
+        String fmt = stylesSource.getNumberFormatAt(index);
+        if(fmt == null) fmt = BuiltinFormats.getBuiltinFormat(index);
         return fmt;
     }
 }
index 963d0df2d23897fe184515c77003290308f429ae..3769ccf196e94a2c174ded8570d666ab7d760454 100644 (file)
 package org.apache.poi.xssf.usermodel;
 
 import org.apache.poi.ss.usermodel.BaseTestDataFormat;
+import org.apache.poi.ss.usermodel.BuiltinFormats;
+import org.apache.poi.ss.usermodel.DataFormatter;
 import org.apache.poi.xssf.XSSFITestDataProvider;
+import org.apache.poi.xssf.XSSFTestDataSamples;
 
 /**
  * Tests for {@link XSSFDataFormat}
@@ -28,4 +31,39 @@ public final class TestXSSFDataFormat extends BaseTestDataFormat {
        public TestXSSFDataFormat() {
                super(XSSFITestDataProvider.instance);
        }
+
+    /**
+     * [Bug 49928] formatCellValue returns incorrect value for \u00a3 formatted cells
+     */
+    public void test49928(){
+        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("49928.xlsx");
+        DataFormatter df = new DataFormatter();
+
+        XSSFSheet sheet = wb.getSheetAt(0);
+        XSSFCell cell = sheet.getRow(0).getCell(0);
+        XSSFCellStyle style = cell.getCellStyle();
+
+        String poundFmt = "\"\u00a3\"#,##0;[Red]\\-\"\u00a3\"#,##0";
+        // not expected normally, id of a custom format should be gerater 
+        // than BuiltinFormats.FIRST_USER_DEFINED_FORMAT_INDEX
+        short  poundFmtIdx = 6;
+
+        assertEquals(poundFmt, style.getDataFormatString());
+        assertEquals(poundFmtIdx, style.getDataFormat());
+        assertEquals("\u00a31", df.formatCellValue(cell));
+
+
+        XSSFDataFormat dataFormat = wb.createDataFormat();
+        assertEquals(poundFmtIdx, dataFormat.getFormat(poundFmt));
+        assertEquals(poundFmt, dataFormat.getFormat(poundFmtIdx));
+
+        // an attempt to register an existing format returns its index
+        assertEquals(poundFmtIdx, wb.getStylesSource().putNumberFormat(poundFmt));
+
+        // now create a custom format with Pound (\u00a3)
+        short customFmtIdx = dataFormat.getFormat("\u00a3##.00[Yellow]");
+        assertTrue(customFmtIdx > BuiltinFormats.FIRST_USER_DEFINED_FORMAT_INDEX );
+        assertEquals("\u00a3##.00[Yellow]", dataFormat.getFormat(customFmtIdx));
+
+    }
 }
diff --git a/test-data/spreadsheet/49928.xlsx b/test-data/spreadsheet/49928.xlsx
new file mode 100644 (file)
index 0000000..6a49ae3
Binary files /dev/null and b/test-data/spreadsheet/49928.xlsx differ