Bug 56011: Use default style if the cell style attribute is not present
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1563470 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
247d74cfa8
commit
7db6081827
@ -132,6 +132,7 @@ public class XSSFSheetXMLHandler extends DefaultHandler {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startElement(String uri, String localName, String name,
|
||||
Attributes attributes) throws SAXException {
|
||||
|
||||
@ -207,18 +208,26 @@ public class XSSFSheetXMLHandler extends DefaultHandler {
|
||||
nextDataType = xssfDataType.SST_STRING;
|
||||
else if ("str".equals(cellType))
|
||||
nextDataType = xssfDataType.FORMULA;
|
||||
else if (cellStyleStr != null) {
|
||||
// Number, but almost certainly with a special style or format
|
||||
int styleIndex = Integer.parseInt(cellStyleStr);
|
||||
XSSFCellStyle style = stylesTable.getStyleAt(styleIndex);
|
||||
this.formatIndex = style.getDataFormat();
|
||||
this.formatString = style.getDataFormatString();
|
||||
if (this.formatString == null)
|
||||
this.formatString = BuiltinFormats.getBuiltinFormat(this.formatIndex);
|
||||
else {
|
||||
// Number, but almost certainly with a special style or format
|
||||
XSSFCellStyle style = null;
|
||||
if (cellStyleStr != null) {
|
||||
int styleIndex = Integer.parseInt(cellStyleStr);
|
||||
style = stylesTable.getStyleAt(styleIndex);
|
||||
} else if (stylesTable.getNumCellStyles() > 0) {
|
||||
style = stylesTable.getStyleAt(0);
|
||||
}
|
||||
if (style != null) {
|
||||
this.formatIndex = style.getDataFormat();
|
||||
this.formatString = style.getDataFormatString();
|
||||
if (this.formatString == null)
|
||||
this.formatString = BuiltinFormats.getBuiltinFormat(this.formatIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endElement(String uri, String localName, String name)
|
||||
throws SAXException {
|
||||
String thisStr = null;
|
||||
@ -316,6 +325,7 @@ public class XSSFSheetXMLHandler extends DefaultHandler {
|
||||
* Captures characters only if a suitable element is open.
|
||||
* Originally was just "v"; extended for inlineStr also.
|
||||
*/
|
||||
@Override
|
||||
public void characters(char[] ch, int start, int length)
|
||||
throws SAXException {
|
||||
if (vIsOpen) {
|
||||
|
@ -17,7 +17,6 @@
|
||||
|
||||
package org.apache.poi.xssf.extractor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@ -26,11 +25,7 @@ import junit.framework.TestCase;
|
||||
import org.apache.poi.POITextExtractor;
|
||||
import org.apache.poi.hssf.HSSFTestDataSamples;
|
||||
import org.apache.poi.hssf.extractor.ExcelExtractor;
|
||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||
import org.apache.poi.xssf.XSSFTestDataSamples;
|
||||
import org.apache.poi.xssf.eventusermodel.XSSFReader;
|
||||
import org.apache.poi.xssf.usermodel.XSSFShape;
|
||||
import org.apache.poi.xssf.usermodel.XSSFSimpleShape;
|
||||
|
||||
/**
|
||||
* Tests for {@link XSSFEventBasedExcelExtractor}
|
||||
@ -187,4 +182,31 @@ public class TestXSSFEventBasedExcelExtractor extends TestCase {
|
||||
assertTrue(text.indexOf("Line 3") > -1);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that we return the same output for unstyled numbers as the
|
||||
* non-event-based XSSFExcelExtractor.
|
||||
*/
|
||||
public void testUnstyledNumbersComparedToNonEventBasedExtractor()
|
||||
throws Exception {
|
||||
|
||||
String expectedOutput = "Sheet1\n99.99\n";
|
||||
|
||||
XSSFExcelExtractor extractor = new XSSFExcelExtractor(
|
||||
XSSFTestDataSamples.openSampleWorkbook("56011.xlsx"));
|
||||
try {
|
||||
assertEquals(expectedOutput, extractor.getText().replace(",", "."));
|
||||
} finally {
|
||||
extractor.close();
|
||||
}
|
||||
|
||||
XSSFEventBasedExcelExtractor fixture =
|
||||
new XSSFEventBasedExcelExtractor(
|
||||
XSSFTestDataSamples.openSamplePackage("56011.xlsx"));
|
||||
try {
|
||||
assertEquals(expectedOutput, fixture.getText().replace(",", "."));
|
||||
} finally {
|
||||
fixture.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
BIN
test-data/spreadsheet/56011.xlsx
Normal file
BIN
test-data/spreadsheet/56011.xlsx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user