From ed67d48d96c3867a6f758da996e3fd9abf24a007 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Mon, 15 Aug 2022 18:40:25 +0000 Subject: [PATCH] [bug-66215] add test case (that shows we have issues and need fixes) git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1903440 13f79535-47bb-0310-9956-ffa450edef68 --- .../formula/TestStructuredReferences.java | 53 ++++++++++++++++-- test-data/spreadsheet/bug66215.xlsx | Bin 0 -> 10935 bytes 2 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 test-data/spreadsheet/bug66215.xlsx diff --git a/poi-ooxml/src/test/java/org/apache/poi/ss/tests/formula/TestStructuredReferences.java b/poi-ooxml/src/test/java/org/apache/poi/ss/tests/formula/TestStructuredReferences.java index 5a77c45c68..64881a2b3b 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/ss/tests/formula/TestStructuredReferences.java +++ b/poi-ooxml/src/test/java/org/apache/poi/ss/tests/formula/TestStructuredReferences.java @@ -21,6 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.CellValue; @@ -30,11 +31,7 @@ import org.apache.poi.ss.usermodel.Table; import org.apache.poi.ss.util.AreaReference; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.XSSFTestDataSamples; -import org.apache.poi.xssf.usermodel.XSSFCell; -import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFTable; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.poi.xssf.usermodel.*; import org.junit.jupiter.api.Test; /** @@ -137,6 +134,52 @@ class TestStructuredReferences { } } + @Test + void testBug66215() throws Exception { + //relates to https://bz.apache.org/bugzilla/show_bug.cgi?id=66215 (this does not work as it should) + try (XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("bug66215.xlsx")) { + XSSFSheet sheet = workbook.getSheetAt(0); + XSSFRow row3 = sheet.getRow(3); + XSSFRow row5 = sheet.getRow(5); + assertEquals("Tabelle1[[#This Row],[Total]]/Tabelle1[[#Totals],[Total]]", row3.getCell(5).getCellFormula()); + assertEquals("Tabelle1[[#This Row],[Total]]/Tabelle1[[#Totals],[Total]]", row5.getCell(5).getCellFormula()); + XSSFTable table = sheet.getTables().get(0); + + int lastTableRow = table.getEndCellReference().getRow(); + int totalsRowCount = table.getTotalsRowCount(); + int lastTableDataRow = lastTableRow - totalsRowCount; + + // we will add one row in table data + lastTableRow++; + lastTableDataRow++; + + // new table area plus one row + AreaReference newTableArea = new AreaReference( + table.getStartCellReference(), + new CellReference( + lastTableRow, + table.getEndCellReference().getCol() + ), + SpreadsheetVersion.EXCEL2007 + ); + + if (totalsRowCount > 0) { + workbook.setCellFormulaValidation(false); + sheet.shiftRows(lastTableDataRow, lastTableRow++, 1); + } + + // set new table area + table.setArea(newTableArea); + + XSSFRow row4 = sheet.getRow(4); + //the next formula has been adjusted more than it should but seems to return correct value + assertEquals("Tabelle2!E5:E5/Tabelle2!E8:E8", row4.getCell(5).getCellFormula()); + XSSFRow row7 = sheet.getRow(7); + //the next formula is completely wrong (should be the same as the value in the row4 assertion above) + assertEquals("SUBTOTAL(109,Tabelle1[Percentage])", row7.getCell(5).getCellFormula()); + } + } + private static void confirm(FormulaEvaluator fe, Cell cell, double expectedResult) { fe.clearAllCachedResultValues(); CellValue cv = fe.evaluate(cell); diff --git a/test-data/spreadsheet/bug66215.xlsx b/test-data/spreadsheet/bug66215.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c9bb68076e45e39d53de1f68a8ec79d27af9c1c3 GIT binary patch literal 10935 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 T?)sCzLINm(JYJFJ=fD30Q^x40 literal 0 HcmV?d00001