From 022b06d172a5e2cc41b7a431be8dd27c82893396 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Tue, 4 Dec 2012 12:44:33 +0000 Subject: [PATCH] Bug 54206: ValueRecordsAggregate.updateFormulasAfterRowShift doesn't update shared formulas git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1416917 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 1 + .../aggregates/ValueRecordsAggregate.java | 14 ++-- .../apache/poi/xssf/usermodel/XSSFSheet.java | 3 +- .../usermodel/helpers/XSSFRowShifter.java | 11 ++-- .../ss/usermodel/BaseTestSheetShiftRows.java | 62 +++++++++++++++++- test-data/spreadsheet/54206.xls | Bin 0 -> 38400 bytes test-data/spreadsheet/54206.xlsx | Bin 0 -> 16423 bytes 7 files changed, 77 insertions(+), 14 deletions(-) create mode 100644 test-data/spreadsheet/54206.xls create mode 100644 test-data/spreadsheet/54206.xlsx diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 9172584538..2374823a42 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 54206 - Ensure that shared formuals are updated when shifting rows in a spreadsheet Synchronize table headers with parent sheet in XSSF 54210 - Fixed rendering text in flipped shapes in PPT2PNG and PPTX2PNG diff --git a/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java b/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java index 70ad5227fd..14415ae9b2 100644 --- a/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java +++ b/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java @@ -292,12 +292,14 @@ public final class ValueRecordsAggregate implements Iterablenull if not found */ - CTCellFormula getSharedFormula(int sid){ + @Internal + public CTCellFormula getSharedFormula(int sid){ return sharedFormulas.get(sid); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFRowShifter.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFRowShifter.java index 40de77bcd4..245d7c1c19 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFRowShifter.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFRowShifter.java @@ -28,10 +28,7 @@ import org.apache.poi.ss.formula.FormulaShifter; import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.formula.ptg.AreaPtg; import org.apache.poi.ss.formula.ptg.AreaErrPtg; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCell; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCellFormula; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTConditionalFormatting; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCfRule; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.*; import java.util.List; import java.util.ArrayList; @@ -156,7 +153,13 @@ public final class XSSFRowShifter { String shiftedFormula = shiftFormula(row, formula, shifter); if (shiftedFormula != null) { f.setStringValue(shiftedFormula); + if(f.getT() == STCellFormulaType.SHARED){ + int si = (int)f.getSi(); + CTCellFormula sf = row.getSheet().getSharedFormula(si); + sf.setStringValue(shiftedFormula); + } } + } if (f.isSetRef()) { //Range of cells which the formula applies to. diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheetShiftRows.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheetShiftRows.java index 1612a09eaa..9146db7521 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheetShiftRows.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheetShiftRows.java @@ -21,6 +21,7 @@ import junit.framework.TestCase; import org.apache.poi.ss.ITestDataProvider; import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellReference; /** * Tests row shifting capabilities. @@ -41,8 +42,6 @@ public abstract class BaseTestSheetShiftRows extends TestCase { * After each shift, writes the workbook to file and reads back to * check. This ensures that if some changes code that breaks * writing or what not, they realize it. - * - * @param sampleName the sample file to test against */ public final void testShiftRows(){ // Read initial file in @@ -324,4 +323,61 @@ public abstract class BaseTestSheetShiftRows extends TestCase { assertEquals(expectedValue, cell.getNumericCellValue(), 0.0); assertEquals(expectedFormula, cell.getCellFormula()); } -} + + public final void testShiftSharedFormulasBug54206() { + Workbook wb = _testDataProvider.openSampleWorkbook("54206." + _testDataProvider.getStandardFileNameExtension()); + + Sheet sheet = wb.getSheetAt(0); + assertEquals("SUMIF($B$19:$B$82,$B4,G$19:G$82)", sheet.getRow(3).getCell(6).getCellFormula()); + assertEquals("SUMIF($B$19:$B$82,$B4,H$19:H$82)", sheet.getRow(3).getCell(7).getCellFormula()); + assertEquals("SUMIF($B$19:$B$82,$B4,I$19:I$82)", sheet.getRow(3).getCell(8).getCellFormula()); + + assertEquals("SUMIF($B$19:$B$82,$B15,G$19:G$82)", sheet.getRow(14).getCell(6).getCellFormula()); + assertEquals("SUMIF($B$19:$B$82,$B15,H$19:H$82)", sheet.getRow(14).getCell(7).getCellFormula()); + assertEquals("SUMIF($B$19:$B$82,$B15,I$19:I$82)", sheet.getRow(14).getCell(8).getCellFormula()); + + // now the whole block G4L:15 + for(int i = 3; i <= 14; i++){ + for(int j = 6; j <= 8; j++){ + String col = CellReference.convertNumToColString(j); + String expectedFormula = "SUMIF($B$19:$B$82,$B"+(i+1)+","+col+"$19:"+col+"$82)"; + assertEquals(expectedFormula, sheet.getRow(i).getCell(j).getCellFormula()); + } + } + + assertEquals("SUM(G24:I24)", sheet.getRow(23).getCell(9).getCellFormula()); + assertEquals("SUM(G25:I25)", sheet.getRow(24).getCell(9).getCellFormula()); + assertEquals("SUM(G26:I26)", sheet.getRow(25).getCell(9).getCellFormula()); + + sheet.shiftRows(24, sheet.getLastRowNum(), 4, true, false); + + assertEquals("SUMIF($B$19:$B$86,$B4,G$19:G$86)", sheet.getRow(3).getCell(6).getCellFormula()); + assertEquals("SUMIF($B$19:$B$86,$B4,H$19:H$86)", sheet.getRow(3).getCell(7).getCellFormula()); + assertEquals("SUMIF($B$19:$B$86,$B4,I$19:I$86)", sheet.getRow(3).getCell(8).getCellFormula()); + + assertEquals("SUMIF($B$19:$B$86,$B15,G$19:G$86)", sheet.getRow(14).getCell(6).getCellFormula()); + assertEquals("SUMIF($B$19:$B$86,$B15,H$19:H$86)", sheet.getRow(14).getCell(7).getCellFormula()); + assertEquals("SUMIF($B$19:$B$86,$B15,I$19:I$86)", sheet.getRow(14).getCell(8).getCellFormula()); + + // now the whole block G4L:15 + for(int i = 3; i <= 14; i++){ + for(int j = 6; j <= 8; j++){ + String col = CellReference.convertNumToColString(j); + String expectedFormula = "SUMIF($B$19:$B$86,$B"+(i+1)+","+col+"$19:"+col+"$86)"; + assertEquals(expectedFormula, sheet.getRow(i).getCell(j).getCellFormula()); + } + } + + assertEquals("SUM(G24:I24)", sheet.getRow(23).getCell(9).getCellFormula()); + + // shifted rows + assertTrue( sheet.getRow(24) == null || sheet.getRow(24).getCell(9) == null); + assertTrue( sheet.getRow(25) == null || sheet.getRow(25).getCell(9) == null); + assertTrue( sheet.getRow(26) == null || sheet.getRow(26).getCell(9) == null); + assertTrue( sheet.getRow(27) == null || sheet.getRow(27).getCell(9) == null); + + assertEquals("SUM(G29:I29)", sheet.getRow(28).getCell(9).getCellFormula()); + assertEquals("SUM(G30:I30)", sheet.getRow(29).getCell(9).getCellFormula()); + + } +} \ No newline at end of file diff --git a/test-data/spreadsheet/54206.xls b/test-data/spreadsheet/54206.xls new file mode 100644 index 0000000000000000000000000000000000000000..24da03b379ab2975e33938a3687dbb81faaa3659 GIT binary patch literal 38400 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%0DM~z@FmYWg z({0}_nflD0$y+ZjNF5cPJ?~_4@rDVr7g&3L->h`eh}f){_M>9s5|-H-bsWBU`Nxmt zU9DZ;XT_7Ze;Kvnm4W--{W#-Fb-xxnl_%%=#J>EegJ+|kU6*P6X#BQq@1H@!lwQc-)eSebJPlCbP1tmXE4d@I0J+Cj zL&w9OLjNrXlzTumU`u3^TbCl3Una@jkxKehkHkACnIRVfm9Y|oN>Q5|6p7psJ{WM) zgx-hUh19>m$A-^hApNW`N`wP@9J0qH8CI5<@=AY*=9T_HFB%{y+h`oRq{FVa<4Fmu z9qgUVFvX=e--Ga5i~%>DhvJuExNlx<-w*NM7!XVN_Ekzp;XIa)b_w%MN+;nwi}k`NAq$hRBFq4-cvIDi z$x;HqP4{18I6+`!G7+=;dDAfqgm*79n)Ez5GI&>?~47EH0&Mwi`ZVVUW9dFi9bztxsyEw-@4 z9)(k;+-ly^oI7jW;Ia6i0hX4cP}8ZF)1MdW_&6^tZeaT)#d$Qa<+u;JTxdn*nEGL9 zMA^oGVPZ9WUXPW4z?HmK)3pJMC6fbpxUP+ecXHrP*EL#Y1NrA07B^|5R#=&zny@IU zoIlL7w$|`6BN??BfyxpSOT~vzNQUJLHyN5oHyKs~-DK3Q$UO8*ZZa~4?2pq6)M*#2FS^NStwi=mJ(4V= zMJ8EBGg4XBTu0VIN7hnDM$b>mJbJcNmQgP)%i8G3=sgwLUt3AG(@|3Y#6DzyLTUOP zA@Hpqe2;`Iy_5g?vHgy}0Pap@ZWZr+$v5?kukcXHl^3okhm|XDT#ylTD{?~D7uR{~_dY%lkr z{Dd)Ydj#tc#zw-kfel8OT7Ko5>YF;q`woK=$WIfe_=@2XE4Qw`q4vRCG!ijgel%OY7_L4*CY3vIxk0+54`LSYCyaxT!

XMF-=H}7@3cxDpc1xYgL8nT4$}QeyXZuV_zM8 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 literal 0 HcmV?d00001 -- 2.39.5