From 7a21e70281a21b37531219dc7bb034bb01f8f37d Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Tue, 11 Aug 2015 14:31:14 +0000 Subject: [PATCH] Bring over some fixes from XSSFSheetXMLHandler, and note that in the javadocs git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1695309 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xssf/eventusermodel/XLSX2CSV.java | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java b/src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java index 892c3bb2bc..6ef160431f 100644 --- a/src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java +++ b/src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java @@ -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. *

- * 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; -- 2.39.5