Przeglądaj źródła

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
tags/POI-3.7
Yegor Kozlov 13 lat temu
rodzic
commit
6ac11ae86c

+ 2
- 2
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataFormat.java Wyświetl plik

* @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);
if(fmt == null) fmt = stylesSource.getNumberFormatAt(index);
String fmt = stylesSource.getNumberFormatAt(index);
if(fmt == null) fmt = BuiltinFormats.getBuiltinFormat(index);
return fmt; return fmt;
} }
} }

+ 38
- 0
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDataFormat.java Wyświetl plik

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}
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 Wyświetl plik


Ładowanie…
Anuluj
Zapisz