]> source.dussan.org Git - poi.git/commitdiff
[bug-66215] add test case (that shows we have issues and need fixes)
authorPJ Fanning <fanningpj@apache.org>
Tue, 16 Aug 2022 13:12:45 +0000 (13:12 +0000)
committerPJ Fanning <fanningpj@apache.org>
Tue, 16 Aug 2022 13:12:45 +0000 (13:12 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1903458 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/test/java/org/apache/poi/ss/tests/formula/TestStructuredReferences.java

index 64881a2b3b91a92ea88cb5a296433ae5ac62c18d..39c20881a3674aec7fa7c86c4ee1ff2c0ac201bf 100644 (file)
@@ -33,6 +33,7 @@ import org.apache.poi.ss.util.CellReference;
 import org.apache.poi.xssf.XSSFTestDataSamples;
 import org.apache.poi.xssf.usermodel.*;
 import org.junit.jupiter.api.Test;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableColumn;
 
 /**
  * Tests Excel Table expressions (structured references)
@@ -177,6 +178,29 @@ class TestStructuredReferences {
             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());
+
+            //correct all sheet table-reference-formulas which probably got damaged after shift rows
+            for (CTTableColumn tableCol : table.getCTTable().getTableColumns().getTableColumnList()) {
+                if (tableCol.getCalculatedColumnFormula() != null) {
+                    int id = (int) tableCol.getId();
+                    String formula = tableCol.getCalculatedColumnFormula().getStringValue();
+                    int rFirst = table.getStartCellReference().getRow() + table.getHeaderRowCount();
+                    int rLast = table.getEndCellReference().getRow() - table.getTotalsRowCount();
+                    int c = table.getStartCellReference().getCol() + id - 1;
+                    sheet.getWorkbook().setCellFormulaValidation(false);
+                    for (int r = rFirst; r <= rLast; r++) {
+                        XSSFRow row = sheet.getRow(r);
+                        if (row == null) row = sheet.createRow(r);
+                        XSSFCell cell = row.getCell(c, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
+                        cell.setCellFormula(formula);
+                    }
+                }
+            }
+
+            //is it right that this reverts back to Tabelle1 when it was Tabelle2 for the 'correct all sheet table-reference-formulas' loop?
+            assertEquals("Tabelle1[[#This Row],[Total]]/Tabelle1[[#Totals],[Total]]", row4.getCell(5).getCellFormula());
+            //the next formula is still completely wrong (should be the same as the value in the row4 assertion above)
+            assertEquals("SUBTOTAL(109,Tabelle1[Percentage])", row7.getCell(5).getCellFormula());
         }
     }