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;
|
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,10 +208,16 @@ 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
|
||||||
|
XSSFCellStyle style = null;
|
||||||
|
if (cellStyleStr != null) {
|
||||||
int styleIndex = Integer.parseInt(cellStyleStr);
|
int styleIndex = Integer.parseInt(cellStyleStr);
|
||||||
XSSFCellStyle style = stylesTable.getStyleAt(styleIndex);
|
style = stylesTable.getStyleAt(styleIndex);
|
||||||
|
} else if (stylesTable.getNumCellStyles() > 0) {
|
||||||
|
style = stylesTable.getStyleAt(0);
|
||||||
|
}
|
||||||
|
if (style != null) {
|
||||||
this.formatIndex = style.getDataFormat();
|
this.formatIndex = style.getDataFormat();
|
||||||
this.formatString = style.getDataFormatString();
|
this.formatString = style.getDataFormatString();
|
||||||
if (this.formatString == null)
|
if (this.formatString == null)
|
||||||
@ -218,7 +225,9 @@ public class XSSFSheetXMLHandler extends DefaultHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@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) {
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
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