allow overridden built-in formats in XSSFCellStyle, see Bugzilla 49928

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1005726 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Yegor Kozlov 2010-10-08 08:26:57 +00:00
parent ff9b658871
commit 6ac11ae86c
3 changed files with 40 additions and 2 deletions

View 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;
}
}

View File

@ -18,7 +18,10 @@
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));
}
}

Binary file not shown.