mirror of https://github.com/apache/poi.git
Bug 57930: Add support for inlineString in FromHowTo
Also do not require an Apache Xerces Parser, let the JDK choose an available one instead git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1737247 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e0d2a967ee
commit
06ba6d5e5c
|
@ -58,7 +58,7 @@ public class FromHowTo {
|
|||
OPCPackage pkg = OPCPackage.open(filename);
|
||||
XSSFReader r = new XSSFReader( pkg );
|
||||
SharedStringsTable sst = r.getSharedStringsTable();
|
||||
|
||||
|
||||
XMLReader parser = fetchSheetParser(sst);
|
||||
|
||||
Iterator<InputStream> sheets = r.getSheetsData();
|
||||
|
@ -73,45 +73,40 @@ public class FromHowTo {
|
|||
}
|
||||
|
||||
public XMLReader fetchSheetParser(SharedStringsTable sst) throws SAXException {
|
||||
XMLReader parser =
|
||||
XMLReaderFactory.createXMLReader(
|
||||
"org.apache.xerces.parsers.SAXParser"
|
||||
);
|
||||
XMLReader parser = XMLReaderFactory.createXMLReader();
|
||||
ContentHandler handler = new SheetHandler(sst);
|
||||
parser.setContentHandler(handler);
|
||||
return parser;
|
||||
}
|
||||
|
||||
/**
|
||||
* See org.xml.sax.helpers.DefaultHandler javadocs
|
||||
/**
|
||||
* See org.xml.sax.helpers.DefaultHandler javadocs
|
||||
*/
|
||||
private static class SheetHandler extends DefaultHandler {
|
||||
private SharedStringsTable sst;
|
||||
private String lastContents;
|
||||
private boolean nextIsString;
|
||||
|
||||
private boolean inlineStr;
|
||||
|
||||
private SheetHandler(SharedStringsTable sst) {
|
||||
this.sst = sst;
|
||||
}
|
||||
|
||||
|
||||
public void startElement(String uri, String localName, String name,
|
||||
Attributes attributes) throws SAXException {
|
||||
Attributes attributes) throws SAXException {
|
||||
// c => cell
|
||||
if(name.equals("c")) {
|
||||
// Print the cell reference
|
||||
System.out.print(attributes.getValue("r") + " - ");
|
||||
// Figure out if the value is an index in the SST
|
||||
String cellType = attributes.getValue("t");
|
||||
if(cellType != null && cellType.equals("s")) {
|
||||
nextIsString = true;
|
||||
} else {
|
||||
nextIsString = false;
|
||||
}
|
||||
nextIsString = cellType != null && cellType.equals("s");
|
||||
inlineStr = cellType != null && cellType.equals("inlineStr");
|
||||
}
|
||||
// Clear contents cache
|
||||
lastContents = "";
|
||||
}
|
||||
|
||||
|
||||
public void endElement(String uri, String localName, String name)
|
||||
throws SAXException {
|
||||
// Process the last contents as required.
|
||||
|
@ -119,12 +114,12 @@ public class FromHowTo {
|
|||
if(nextIsString) {
|
||||
int idx = Integer.parseInt(lastContents);
|
||||
lastContents = new XSSFRichTextString(sst.getEntryAt(idx)).toString();
|
||||
nextIsString = false;
|
||||
nextIsString = false;
|
||||
}
|
||||
|
||||
// v => contents of a cell
|
||||
// Output after we've seen the string contents
|
||||
if(name.equals("v")) {
|
||||
if(name.equals("v") || (inlineStr && name.equals("c"))) {
|
||||
System.out.println(lastContents);
|
||||
}
|
||||
}
|
||||
|
@ -133,7 +128,7 @@ public class FromHowTo {
|
|||
lastContents += new String(ch, start, length);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
FromHowTo howto = new FromHowTo();
|
||||
howto.processFirstSheet(args[0]);
|
||||
|
|
Loading…
Reference in New Issue