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:
Dominik Stadler 2014-02-01 20:54:09 +00:00
parent 3c40a957bc
commit bc936983a5
3 changed files with 45 additions and 13 deletions

View File

@ -132,6 +132,7 @@ public class XSSFSheetXMLHandler extends DefaultHandler {
return false; return false;
} }
@Override
public void startElement(String uri, String localName, String name, public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException { Attributes attributes) throws SAXException {
@ -207,18 +208,26 @@ public class XSSFSheetXMLHandler extends DefaultHandler {
nextDataType = xssfDataType.SST_STRING; nextDataType = xssfDataType.SST_STRING;
else if ("str".equals(cellType)) else if ("str".equals(cellType))
nextDataType = xssfDataType.FORMULA; nextDataType = xssfDataType.FORMULA;
else if (cellStyleStr != null) { else {
// Number, but almost certainly with a special style or format // Number, but almost certainly with a special style or format
int styleIndex = Integer.parseInt(cellStyleStr); XSSFCellStyle style = null;
XSSFCellStyle style = stylesTable.getStyleAt(styleIndex); if (cellStyleStr != null) {
this.formatIndex = style.getDataFormat(); int styleIndex = Integer.parseInt(cellStyleStr);
this.formatString = style.getDataFormatString(); style = stylesTable.getStyleAt(styleIndex);
if (this.formatString == null) } else if (stylesTable.getNumCellStyles() > 0) {
this.formatString = BuiltinFormats.getBuiltinFormat(this.formatIndex); 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) public void endElement(String uri, String localName, String name)
throws SAXException { throws SAXException {
String thisStr = null; String thisStr = null;
@ -316,6 +325,7 @@ public class XSSFSheetXMLHandler extends DefaultHandler {
* Captures characters only if a suitable element is open. * Captures characters only if a suitable element is open.
* Originally was just "v"; extended for inlineStr also. * Originally was just "v"; extended for inlineStr also.
*/ */
@Override
public void characters(char[] ch, int start, int length) public void characters(char[] ch, int start, int length)
throws SAXException { throws SAXException {
if (vIsOpen) { if (vIsOpen) {

View File

@ -17,7 +17,6 @@
package org.apache.poi.xssf.extractor; package org.apache.poi.xssf.extractor;
import java.util.List;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -26,11 +25,7 @@ import junit.framework.TestCase;
import org.apache.poi.POITextExtractor; import org.apache.poi.POITextExtractor;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.extractor.ExcelExtractor; 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.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} * Tests for {@link XSSFEventBasedExcelExtractor}
@ -187,4 +182,31 @@ public class TestXSSFEventBasedExcelExtractor extends TestCase {
assertTrue(text.indexOf("Line 3") > -1); 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();
}
}
} }

Binary file not shown.