int si = (int)f.getSi();
CTCellFormula sf = sheet.getSharedFormula(si);
sf.setStringValue(shiftedFormula);
+ updateRefInCTCellFormula(row, shifter, sf);
}
}
}
//Range of cells which the formula applies to.
- if (f.isSetRef()) {
- String ref = f.getRef();
- String shiftedRef = shiftFormula(row, ref, shifter);
- if (shiftedRef != null) f.setRef(shiftedRef);
- }
+ updateRefInCTCellFormula(row, shifter, f);
}
}
}
+ private void updateRefInCTCellFormula(Row row, FormulaShifter shifter, CTCellFormula f) {
+ if (f.isSetRef()) { //Range of cells which the formula applies to.
+ String ref = f.getRef();
+ String shiftedRef = shiftFormula(row, ref, shifter);
+ if (shiftedRef != null) f.setRef(shiftedRef);
+ }
+ }
+
/**
* Shift a formula using the supplied FormulaShifter
*
return cell.getCellFormula();
}
- // This test is written as expected-to-fail and should be rewritten
- // as expected-to-pass when the bug is fixed.
+ // bug 59983: Wrong update of shared formulas after shiftRow
@Test
public void testSharedFormulas() throws Exception {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("TestShiftRowSharedFormula.xlsx");
assertEquals("SUM(D2:D4)", getCellFormula(sheet, "D5"));
assertEquals("SUM(E2:E4)", getCellFormula(sheet, "E5"));
+ assertEquals("SUM(C3:C5)", getCellFormula(sheet, "C6"));
+ assertEquals("SUM(D3:D5)", getCellFormula(sheet, "D6"));
+ assertEquals("SUM(E3:E5)", getCellFormula(sheet, "E6"));
+
sheet.shiftRows(3, sheet.getLastRowNum(), 1);
- // FIXME: remove try, catch, and testPassesNow, skipTest when test passes
- try {
- assertEquals("SUM(C2:C5)", getCellFormula(sheet, "C6"));
- assertEquals("SUM(D2:D5)", getCellFormula(sheet, "D6"));
- assertEquals("SUM(E2:E5)", getCellFormula(sheet, "E6"));
- testPassesNow(59983);
- } catch (AssertionError e) {
- skipTest(e);
- }
-
+
+ assertEquals("SUM(C2:C5)", getCellFormula(sheet, "C6"));
+ assertEquals("SUM(D2:D5)", getCellFormula(sheet, "D6"));
+ assertEquals("SUM(E2:E5)", getCellFormula(sheet, "E6"));
+
+ assertEquals("SUM(C3:C6)", getCellFormula(sheet, "C7"));
+ assertEquals("SUM(D3:D6)", getCellFormula(sheet, "D7"));
+ assertEquals("SUM(E3:E6)", getCellFormula(sheet, "E7"));
+ wb.close();
+ }
+
+ // bug 59983: Wrong update of shared formulas after shiftRow
+ @Test
+ public void testShiftSharedFormulas() throws Exception {
+ XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("TestShiftRowSharedFormula.xlsx");
+ XSSFSheet sheet = wb.getSheetAt(0);
+ assertEquals("SUM(C2:C4)", getCellFormula(sheet, "C5"));
+ assertEquals("SUM(D2:D4)", getCellFormula(sheet, "D5"));
+ assertEquals("SUM(E2:E4)", getCellFormula(sheet, "E5"));
+
+ assertEquals("SUM(C3:C5)", getCellFormula(sheet, "C6"));
+ assertEquals("SUM(D3:D5)", getCellFormula(sheet, "D6"));
+ assertEquals("SUM(E3:E5)", getCellFormula(sheet, "E6"));
+
+ sheet.shiftRows(sheet.getFirstRowNum(), 4, -1);
+
+ assertEquals("SUM(C1:C3)", getCellFormula(sheet, "C4"));
+ assertEquals("SUM(D1:D3)", getCellFormula(sheet, "D4"));
+ assertEquals("SUM(E1:E3)", getCellFormula(sheet, "E4"));
+
+ assertEquals("SUM(C2:C4)", getCellFormula(sheet, "C6"));
+ assertEquals("SUM(D2:D4)", getCellFormula(sheet, "D6"));
+ assertEquals("SUM(E2:E4)", getCellFormula(sheet, "E6"));
wb.close();
}