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:
parent
d6307ad1aa
commit
7c3ce57a61
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
|
||||
}
|
||||
}
|
||||
|
BIN
test-data/spreadsheet/49928.xlsx
Normal file
BIN
test-data/spreadsheet/49928.xlsx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user