diff options
author | Yegor Kozlov <yegor@apache.org> | 2012-03-11 07:19:07 +0000 |
---|---|---|
committer | Yegor Kozlov <yegor@apache.org> | 2012-03-11 07:19:07 +0000 |
commit | 1cbefe6afbca61839950d9018dc8b6809f2c974c (patch) | |
tree | f2bab6fba1aa6703550041a14be74d0355bd2640 /src/ooxml/java/org/apache/poi/xssf/eventusermodel | |
parent | 07953482050cf00dad98e54a850abde0756cd567 (diff) | |
download | poi-1cbefe6afbca61839950d9018dc8b6809f2c974c.tar.gz poi-1cbefe6afbca61839950d9018dc8b6809f2c974c.zip |
Bugzilla 52835 - Tolerate missing Count and UniqueCount attributes when parsing shared strings table in XSSF eventusermodel
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1299338 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/java/org/apache/poi/xssf/eventusermodel')
-rw-r--r-- | src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java index 52e2c258ae..8a4b139ff9 100644 --- a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/ReadOnlySharedStringsTable.java @@ -19,6 +19,7 @@ package org.apache.poi.xssf.eventusermodel; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; @@ -28,6 +29,7 @@ import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackageRelationship; import org.apache.poi.xssf.usermodel.XSSFRelation; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -91,7 +93,7 @@ public class ReadOnlySharedStringsTable extends DefaultHandler { /** * The shared strings table. */ - private String[] strings; + private List<String> strings; /** * @param pkg @@ -173,24 +175,28 @@ public class ReadOnlySharedStringsTable extends DefaultHandler { * @return the item at the specified position in this Shared String table. */ public String getEntryAt(int idx) { - return strings[idx]; + return strings.get(idx); + } + + public List<String> getItems() { + return strings; } //// ContentHandler methods //// private StringBuffer characters; private boolean tIsOpen; - private int index; public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { if ("sst".equals(name)) { String count = attributes.getValue("count"); + if(count != null) this.count = Integer.parseInt(count); String uniqueCount = attributes.getValue("uniqueCount"); - this.count = Integer.parseInt(count); - this.uniqueCount = Integer.parseInt(uniqueCount); - this.strings = new String[this.uniqueCount]; - index = 0; + if(uniqueCount != null) this.uniqueCount = Integer.parseInt(uniqueCount); + + this.strings = new ArrayList<String>(this.uniqueCount); + characters = new StringBuffer(); } else if ("si".equals(name)) { characters.setLength(0); @@ -202,8 +208,7 @@ public class ReadOnlySharedStringsTable extends DefaultHandler { public void endElement(String uri, String localName, String name) throws SAXException { if ("si".equals(name)) { - strings[index] = characters.toString(); - ++index; + strings.add(characters.toString()); } else if ("t".equals(name)) { tIsOpen = false; } |