From 0802856eb00758ae6ab0123614b1197c9ef77f9d Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 12 Sep 2023 15:06:54 +0100 Subject: [PATCH] make int parsing more tolerant of stray whitespace --- .../xlsx/impl/BaseEvaluationWorkbook.java | 4 ++- .../pjfanning/xlsx/impl/NumberUtil.java | 12 +++++++++ .../pjfanning/xlsx/impl/StreamingCell.java | 4 ++- .../xlsx/impl/StreamingRowIterator.java | 23 ++++++++++-------- .../xlsx/impl/StreamingSheetReader.java | 4 ++- .../pjfanning/xlsx/StreamingWorkbookTest.java | 12 +++++++++ src/test/resources/extra_whitespace.xlsx | Bin 0 -> 566559 bytes 7 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/github/pjfanning/xlsx/impl/NumberUtil.java create mode 100644 src/test/resources/extra_whitespace.xlsx diff --git a/src/main/java/com/github/pjfanning/xlsx/impl/BaseEvaluationWorkbook.java b/src/main/java/com/github/pjfanning/xlsx/impl/BaseEvaluationWorkbook.java index e4937348..f25b9cbd 100644 --- a/src/main/java/com/github/pjfanning/xlsx/impl/BaseEvaluationWorkbook.java +++ b/src/main/java/com/github/pjfanning/xlsx/impl/BaseEvaluationWorkbook.java @@ -15,6 +15,8 @@ import org.apache.poi.xssf.usermodel.XSSFName; import org.apache.poi.xssf.usermodel.XSSFTable; +import static com.github.pjfanning.xlsx.impl.NumberUtil.parseInt; + /** * Copied from POI BaseXSSFEvaluationWorkbook but a lot of stuff is removed because it is not easy * or impossible to support in excel-streaming-reader @@ -78,7 +80,7 @@ private int resolveBookIndex(String bookName) { // Is it already in numeric form? try { - return Integer.parseInt(bookName); + return parseInt(bookName); } catch (NumberFormatException e) {} // Not properly referenced diff --git a/src/main/java/com/github/pjfanning/xlsx/impl/NumberUtil.java b/src/main/java/com/github/pjfanning/xlsx/impl/NumberUtil.java new file mode 100644 index 00000000..5c0286ab --- /dev/null +++ b/src/main/java/com/github/pjfanning/xlsx/impl/NumberUtil.java @@ -0,0 +1,12 @@ +package com.github.pjfanning.xlsx.impl; + +final class NumberUtil { + + static int parseInt(final String s) { + return Integer.parseInt(s.trim()); + } + + static double parseDouble(final String s) { + return Double.parseDouble(s.trim()); + } +} diff --git a/src/main/java/com/github/pjfanning/xlsx/impl/StreamingCell.java b/src/main/java/com/github/pjfanning/xlsx/impl/StreamingCell.java index 4e019585..799cdaec 100644 --- a/src/main/java/com/github/pjfanning/xlsx/impl/StreamingCell.java +++ b/src/main/java/com/github/pjfanning/xlsx/impl/StreamingCell.java @@ -13,6 +13,8 @@ import java.util.Calendar; import java.util.Date; +import static com.github.pjfanning.xlsx.impl.NumberUtil.parseDouble; + public class StreamingCell implements Cell { private static final Supplier NULL_SUPPLIER = () -> null; @@ -197,7 +199,7 @@ public double getNumericCellValue() { } } } - return rawContents == null ? 0.0 : Double.parseDouble(rawContents); + return rawContents == null ? 0.0 : parseDouble(rawContents); } /** diff --git a/src/main/java/com/github/pjfanning/xlsx/impl/StreamingRowIterator.java b/src/main/java/com/github/pjfanning/xlsx/impl/StreamingRowIterator.java index 99756281..808e149a 100644 --- a/src/main/java/com/github/pjfanning/xlsx/impl/StreamingRowIterator.java +++ b/src/main/java/com/github/pjfanning/xlsx/impl/StreamingRowIterator.java @@ -38,6 +38,9 @@ import java.time.LocalDateTime; import java.util.*; +import static com.github.pjfanning.xlsx.impl.NumberUtil.parseDouble; +import static com.github.pjfanning.xlsx.impl.NumberUtil.parseInt; + class StreamingRowIterator implements CloseableIterator { private static final Logger LOG = LoggerFactory.getLogger(StreamingRowIterator.class); private static final QName QNAME_HIDDEN = QName.valueOf("hidden"); @@ -144,7 +147,7 @@ && isSpreadsheetTag(event.asStartElement().getName())) { Attribute rowNumAttr = startElement.getAttributeByName(QNAME_R); int rowIndex = currentRowNum; if (rowNumAttr != null) { - rowIndex = Integer.parseInt(rowNumAttr.getValue()) - 1; + rowIndex = parseInt(rowNumAttr.getValue()) - 1; currentRowNum = rowIndex; } Attribute isHiddenAttr = startElement.getAttributeByName(QNAME_HIDDEN); @@ -166,7 +169,7 @@ && isSpreadsheetTag(event.asStartElement().getName())) { if (styleAttr != null) { String indexStr = styleAttr.getValue(); try { - int index = Integer.parseInt(indexStr); + final int index = parseInt(indexStr); currentRow.setRowStyle(stylesTable.getStyleAt(index)); } catch (NumberFormatException nfe) { LOG.warn("Ignoring invalid row style index {}", indexStr); @@ -189,8 +192,8 @@ && isSpreadsheetTag(event.asStartElement().getName())) { if (isHidden || width >= 0) { Attribute minAttr = startElement.getAttributeByName(QNAME_MIN); Attribute maxAttr = startElement.getAttributeByName(QNAME_MAX); - int min = Integer.parseInt(minAttr.getValue()) - 1; - int max = Integer.parseInt(maxAttr.getValue()) - 1; + int min = parseInt(minAttr.getValue()) - 1; + int max = parseInt(maxAttr.getValue()) - 1; for (int columnIndex = min; columnIndex <= max; columnIndex++) { if (isHidden) hiddenColumns.add(columnIndex); if (width >= 0) columnWidths.put(columnIndex, width); @@ -226,7 +229,7 @@ && isSpreadsheetTag(event.asStartElement().getName())) { if (style != null) { String indexStr = style.getValue(); try { - int index = Integer.parseInt(indexStr); + final int index = Integer.parseInt(indexStr); currentCell.setCellStyle(stylesTable.getStyleAt(index)); } catch (NumberFormatException nfe) { LOG.warn("Ignoring invalid style index {}", indexStr); @@ -249,7 +252,7 @@ && isSpreadsheetTag(event.asStartElement().getName())) { for (int i = ref.length() - 1; i >= 0; i--) { if (!Character.isDigit(ref.charAt(i))) { try { - streamingSheetReader.setLastRowNum(Integer.parseInt(ref.substring(i + 1)) - 1); + streamingSheetReader.setLastRowNum(parseInt(ref.substring(i + 1)) - 1); } catch (NumberFormatException ignore) { } break; @@ -467,7 +470,7 @@ private void parseSheetFormatPr(final StartElement startElement) { final Attribute baseColWidthAtt = startElement.getAttributeByName(QName.valueOf("baseColWidth")); if (baseColWidthAtt != null) { try { - streamingSheetReader.setBaseColWidth(Integer.parseInt(baseColWidthAtt.getValue())); + streamingSheetReader.setBaseColWidth(parseInt(baseColWidthAtt.getValue())); } catch (Exception e) { LOG.warn("unable to parse baseColWidth {}", baseColWidthAtt.getValue()); } @@ -504,7 +507,7 @@ private Supplier getFormatterForType(String type) { switch(type) { case "s": //string stored in shared table if (!lastContents.isEmpty()) { - int idx = Integer.parseInt(lastContents); + final int idx = parseInt(lastContents); if (!getBuilder().fullFormatRichText() && sst instanceof SharedStringsTableBase) { return new LazySupplier<>(() -> ((SharedStringsTableBase)sst).getString(idx)); } @@ -525,7 +528,7 @@ private Supplier getFormatterForType(String type) { final String currentNumericFormat = currentCell.getNumericFormat(); return new LazySupplier<>(() -> dataFormatter.formatRawCellContents( - Double.parseDouble(lastContents), + parseDouble(lastContents), currentNumericFormatIndex, currentNumericFormat)); @@ -580,7 +583,7 @@ private String unformattedContents(Supplier formattedContentSupplier) { return formattedContent.toString(); } if (!lastContents.isEmpty()) { - int idx = Integer.parseInt(lastContents); + final int idx = parseInt(lastContents); if (sst == null) throw new NullPointerException("sst is null"); if (sst instanceof SharedStringsTableBase) { return ((SharedStringsTableBase)sst).getString(idx); diff --git a/src/main/java/com/github/pjfanning/xlsx/impl/StreamingSheetReader.java b/src/main/java/com/github/pjfanning/xlsx/impl/StreamingSheetReader.java index aae7f909..2dc79523 100644 --- a/src/main/java/com/github/pjfanning/xlsx/impl/StreamingSheetReader.java +++ b/src/main/java/com/github/pjfanning/xlsx/impl/StreamingSheetReader.java @@ -37,6 +37,8 @@ import java.io.IOException; import java.util.*; +import static com.github.pjfanning.xlsx.impl.NumberUtil.parseInt; + public class StreamingSheetReader implements Iterable { private static final Logger LOG = LoggerFactory.getLogger(StreamingSheetReader.class); @@ -200,7 +202,7 @@ void setFormatString(StartElement startElement, StreamingCell cell) { if (stylesTable != null) { if(cellStyleString != null) { - style = stylesTable.getStyleAt(Integer.parseInt(cellStyleString)); + style = stylesTable.getStyleAt(parseInt(cellStyleString)); } else if(stylesTable.getNumCellStyles() > 0) { style = stylesTable.getStyleAt(0); } diff --git a/src/test/java/com/github/pjfanning/xlsx/StreamingWorkbookTest.java b/src/test/java/com/github/pjfanning/xlsx/StreamingWorkbookTest.java index 4be94d71..95b8abe0 100644 --- a/src/test/java/com/github/pjfanning/xlsx/StreamingWorkbookTest.java +++ b/src/test/java/com/github/pjfanning/xlsx/StreamingWorkbookTest.java @@ -866,6 +866,18 @@ public void testSheetReadWrongOrder() throws Exception { } } + @Test + public void testExtraWhitespace() throws Exception { + try (Workbook workbook = openWorkbook("extra_whitespace.xlsx")) { + Sheet sheet = workbook.getSheetAt(0); + for(Row row : sheet) { + for(Cell cell : row) { + + } + } + } + } + private void validateFormatsSheet(Sheet sheet) throws IOException { Iterator rowIterator = sheet.rowIterator(); diff --git a/src/test/resources/extra_whitespace.xlsx b/src/test/resources/extra_whitespace.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..41356f38114935a56b28951af5c551bc4b4821ec GIT binary patch literal 566559 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 literal 0 HcmV?d00001