From 6e492e290cbe66de97edb004f0780e0445ec8594 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Thu, 23 Jun 2016 18:59:48 +0000 Subject: [PATCH] #59746 XSSF support for files from certain alternate tools where the row XML is missing the row number git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1749971 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/poi/xssf/usermodel/XSSFRow.java | 10 ++++++++++ .../org/apache/poi/xssf/usermodel/TestXSSFBugs.java | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java index 4b73e36ca5..ee956b437d 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java @@ -77,6 +77,16 @@ public class XSSFRow implements Row, Comparable { _cells.put(colI, cell); sheet.onReadCell(cell); } + + if (! row.isSetR()) { + // Certain file format writers skip the row number + // Assume no gaps, and give this the next row number + int nextRowNum = sheet.getLastRowNum()+2; + if (nextRowNum == 2 && sheet.getPhysicalNumberOfRows() == 0) { + nextRowNum = 1; + } + row.setR(nextRowNum); + } } /** diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index 97ace44e47..41adc133a8 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -3088,7 +3088,6 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { * to include the row number on the row tags */ @Test - @Ignore("Not yet supported") public void noRowNumbers59746() { Workbook wb = XSSFTestDataSamples.openSampleWorkbook("59746_NoRowNums.xlsx"); Sheet sheet = wb.getSheetAt(0); @@ -3096,5 +3095,8 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { assertEquals("Checked", sheet.getRow(0).getCell(0).getStringCellValue()); assertEquals("Checked", sheet.getRow(9).getCell(2).getStringCellValue()); assertEquals(false, sheet.getRow(70).getCell(8).getBooleanCellValue()); + assertEquals(71, sheet.getPhysicalNumberOfRows()); + assertEquals(70, sheet.getLastRowNum()); + assertEquals(70, sheet.getRow(sheet.getLastRowNum()).getRowNum()); } } -- 2.39.5