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
12f99cc9d5
commit
316c1fe307
@ -58,7 +58,7 @@ public class FromHowTo {
|
|||||||
OPCPackage pkg = OPCPackage.open(filename);
|
OPCPackage pkg = OPCPackage.open(filename);
|
||||||
XSSFReader r = new XSSFReader( pkg );
|
XSSFReader r = new XSSFReader( pkg );
|
||||||
SharedStringsTable sst = r.getSharedStringsTable();
|
SharedStringsTable sst = r.getSharedStringsTable();
|
||||||
|
|
||||||
XMLReader parser = fetchSheetParser(sst);
|
XMLReader parser = fetchSheetParser(sst);
|
||||||
|
|
||||||
Iterator<InputStream> sheets = r.getSheetsData();
|
Iterator<InputStream> sheets = r.getSheetsData();
|
||||||
@ -73,45 +73,40 @@ public class FromHowTo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public XMLReader fetchSheetParser(SharedStringsTable sst) throws SAXException {
|
public XMLReader fetchSheetParser(SharedStringsTable sst) throws SAXException {
|
||||||
XMLReader parser =
|
XMLReader parser = XMLReaderFactory.createXMLReader();
|
||||||
XMLReaderFactory.createXMLReader(
|
|
||||||
"org.apache.xerces.parsers.SAXParser"
|
|
||||||
);
|
|
||||||
ContentHandler handler = new SheetHandler(sst);
|
ContentHandler handler = new SheetHandler(sst);
|
||||||
parser.setContentHandler(handler);
|
parser.setContentHandler(handler);
|
||||||
return parser;
|
return parser;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See org.xml.sax.helpers.DefaultHandler javadocs
|
* See org.xml.sax.helpers.DefaultHandler javadocs
|
||||||
*/
|
*/
|
||||||
private static class SheetHandler extends DefaultHandler {
|
private static class SheetHandler extends DefaultHandler {
|
||||||
private SharedStringsTable sst;
|
private SharedStringsTable sst;
|
||||||
private String lastContents;
|
private String lastContents;
|
||||||
private boolean nextIsString;
|
private boolean nextIsString;
|
||||||
|
private boolean inlineStr;
|
||||||
|
|
||||||
private SheetHandler(SharedStringsTable sst) {
|
private SheetHandler(SharedStringsTable sst) {
|
||||||
this.sst = sst;
|
this.sst = sst;
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
||||||
// c => cell
|
// c => cell
|
||||||
if(name.equals("c")) {
|
if(name.equals("c")) {
|
||||||
// Print the cell reference
|
// Print the cell reference
|
||||||
System.out.print(attributes.getValue("r") + " - ");
|
System.out.print(attributes.getValue("r") + " - ");
|
||||||
// Figure out if the value is an index in the SST
|
// Figure out if the value is an index in the SST
|
||||||
String cellType = attributes.getValue("t");
|
String cellType = attributes.getValue("t");
|
||||||
if(cellType != null && cellType.equals("s")) {
|
nextIsString = cellType != null && cellType.equals("s");
|
||||||
nextIsString = true;
|
inlineStr = cellType != null && cellType.equals("inlineStr");
|
||||||
} else {
|
|
||||||
nextIsString = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Clear contents cache
|
// Clear contents cache
|
||||||
lastContents = "";
|
lastContents = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endElement(String uri, String localName, String name)
|
public void endElement(String uri, String localName, String name)
|
||||||
throws SAXException {
|
throws SAXException {
|
||||||
// Process the last contents as required.
|
// Process the last contents as required.
|
||||||
@ -119,12 +114,12 @@ public class FromHowTo {
|
|||||||
if(nextIsString) {
|
if(nextIsString) {
|
||||||
int idx = Integer.parseInt(lastContents);
|
int idx = Integer.parseInt(lastContents);
|
||||||
lastContents = new XSSFRichTextString(sst.getEntryAt(idx)).toString();
|
lastContents = new XSSFRichTextString(sst.getEntryAt(idx)).toString();
|
||||||
nextIsString = false;
|
nextIsString = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// v => contents of a cell
|
// v => contents of a cell
|
||||||
// Output after we've seen the string contents
|
// Output after we've seen the string contents
|
||||||
if(name.equals("v")) {
|
if(name.equals("v") || (inlineStr && name.equals("c"))) {
|
||||||
System.out.println(lastContents);
|
System.out.println(lastContents);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,7 +128,7 @@ public class FromHowTo {
|
|||||||
lastContents += new String(ch, start, length);
|
lastContents += new String(ch, start, length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
FromHowTo howto = new FromHowTo();
|
FromHowTo howto = new FromHowTo();
|
||||||
howto.processFirstSheet(args[0]);
|
howto.processFirstSheet(args[0]);
|
||||||
|
Loading…
Reference in New Issue
Block a user