]> source.dussan.org Git - poi.git/commitdiff
Bring over some fixes from XSSFSheetXMLHandler, and note that in the javadocs
authorNick Burch <nick@apache.org>
Tue, 11 Aug 2015 14:31:14 +0000 (14:31 +0000)
committerNick Burch <nick@apache.org>
Tue, 11 Aug 2015 14:31:14 +0000 (14:31 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1695309 13f79535-47bb-0310-9956-ffa450edef68

src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java

index 892c3bb2bc50fdefe3c8e13eb55d31409844a4ae..6ef160431f14a5cec82e7092ded459fefbad4474 100644 (file)
@@ -31,6 +31,8 @@ import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.openxml4j.opc.PackageAccess;
 import org.apache.poi.ss.usermodel.BuiltinFormats;
 import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler.SheetContentsHandler;
+import org.apache.poi.xssf.extractor.XSSFEventBasedExcelExtractor;
 import org.apache.poi.xssf.model.StylesTable;
 import org.apache.poi.xssf.usermodel.XSSFCellStyle;
 import org.apache.poi.xssf.usermodel.XSSFRichTextString;
@@ -57,12 +59,12 @@ import org.xml.sax.helpers.DefaultHandler;
  * because the standard POI SharedStringsTable grows very
  * quickly with the number of unique strings.
  * <p/>
- * Thanks to Eric Smith for a patch that fixes a problem
- * triggered by cells with multiple "t" elements, which is
- * how Excel represents different formats (e.g., one word
- * plain and one word bold).
- * 
- * @author Chris Lott
+ * For a more advanced implementation of SAX event parsing
+ * of XLSX files, see {@link XSSFEventBasedExcelExtractor}
+ * and {@link XSSFSheetXMLHandler}. Note that some use cases,
+ * it may be possible to simply use those with a custom 
+ * {@link SheetContentsHandler} and no SAX code needed of
+ * your own!
  */
 public class XLSX2CSV {
 
@@ -195,12 +197,19 @@ public class XLSX2CSV {
                 else if (cellStyleStr != null) {
                     // It's a number, but almost certainly one
                     //  with a special style or format 
-                    int styleIndex = Integer.parseInt(cellStyleStr);
-                    XSSFCellStyle style = stylesTable.getStyleAt(styleIndex);
-                    this.formatIndex = style.getDataFormat();
-                    this.formatString = style.getDataFormatString();
-                    if (this.formatString == null)
-                        this.formatString = BuiltinFormats.getBuiltinFormat(this.formatIndex);
+                    XSSFCellStyle style = null;
+                    if (cellStyleStr != null) {
+                        int styleIndex = Integer.parseInt(cellStyleStr);
+                        style = stylesTable.getStyleAt(styleIndex);
+                    } else if (stylesTable.getNumCellStyles() > 0) {
+                        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);
+                    }
                 }
             }
 
@@ -256,7 +265,7 @@ public class XLSX2CSV {
 
                     case NUMBER:
                         String n = value.toString();
-                        if (this.formatString != null)
+                        if (this.formatString != null && n.length() > 0)
                             thisStr = formatter.formatRawCellContents(Double.parseDouble(n), this.formatIndex, this.formatString);
                         else
                             thisStr = n;