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
|
* @return string represented at index of format or null if there is not a format at that index
|
||||||
*/
|
*/
|
||||||
public String getFormat(short index) {
|
public String getFormat(short index) {
|
||||||
String fmt = BuiltinFormats.getBuiltinFormat(index);
|
String fmt = stylesSource.getNumberFormatAt(index);
|
||||||
if(fmt == null) fmt = stylesSource.getNumberFormatAt(index);
|
if(fmt == null) fmt = BuiltinFormats.getBuiltinFormat(index);
|
||||||
return fmt;
|
return fmt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,10 @@
|
|||||||
package org.apache.poi.xssf.usermodel;
|
package org.apache.poi.xssf.usermodel;
|
||||||
|
|
||||||
import org.apache.poi.ss.usermodel.BaseTestDataFormat;
|
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.XSSFITestDataProvider;
|
||||||
|
import org.apache.poi.xssf.XSSFTestDataSamples;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for {@link XSSFDataFormat}
|
* Tests for {@link XSSFDataFormat}
|
||||||
@ -28,4 +31,39 @@ public final class TestXSSFDataFormat extends BaseTestDataFormat {
|
|||||||
public TestXSSFDataFormat() {
|
public TestXSSFDataFormat() {
|
||||||
super(XSSFITestDataProvider.instance);
|
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