ASF Bugzilla – Attachment 33926 Details for
Bug 59673
HSSFWorkbook#setSheetOrder does not update external sheet indexes in formula references with ranges rather than single cells
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch making treatment of Area3DPtg and Ref3DPtg consistent
shiftAreas.patch (text/plain), 4.07 KB, created by
Matthew Wightman
on 2016-06-08 09:44:06 UTC
(
hide
)
Description:
Patch making treatment of Area3DPtg and Ref3DPtg consistent
Filename:
MIME Type:
Creator:
Matthew Wightman
Created:
2016-06-08 09:44:06 UTC
Size:
4.07 KB
patch
obsolete
>diff --git a/src/java/org/apache/poi/ss/formula/FormulaShifter.java b/src/java/org/apache/poi/ss/formula/FormulaShifter.java >index 1e79b1d..dda1986 100644 >--- a/src/java/org/apache/poi/ss/formula/FormulaShifter.java >+++ b/src/java/org/apache/poi/ss/formula/FormulaShifter.java >@@ -282,11 +282,7 @@ public final class FormulaShifter { > } > > >- private Ptg adjustPtgDueToSheetMove(Ptg ptg) { >- if(ptg instanceof Ref3DPtg) { >- Ref3DPtg ref = (Ref3DPtg)ptg; >- int oldSheetIndex = ref.getExternSheetIndex(); >- >+ private Integer findNewSheetIndexDueToSheetMove(int oldSheetIndex) { > // we have to handle a few cases here > > // 1. sheet is outside moved sheets, no change necessary >@@ -301,23 +297,41 @@ public final class FormulaShifter { > > // 2. ptg refers to the moved sheet > if(oldSheetIndex == _srcSheetIndex) { >- ref.setExternSheetIndex(_dstSheetIndex); >- return ref; >+ return _dstSheetIndex; > } > > // 3. new index is lower than old one => sheets get moved up > if (_dstSheetIndex < _srcSheetIndex) { >- ref.setExternSheetIndex(oldSheetIndex+1); >- return ref; >+ return oldSheetIndex+1; > } > > // 4. new index is higher than old one => sheets get moved down > if (_dstSheetIndex > _srcSheetIndex) { >- ref.setExternSheetIndex(oldSheetIndex-1); >- return ref; >+ return oldSheetIndex-1; > } >- } >+ return null; >+ } > >+ private Ptg adjustPtgDueToSheetMove(Ptg ptg) { >+ if(ptg instanceof Ref3DPtg) { >+ Ref3DPtg ref = (Ref3DPtg)ptg; >+ Integer newSheetIndex = findNewSheetIndexDueToSheetMove(ref.getExternSheetIndex()); >+ if (newSheetIndex != null) { >+ ref.setExternSheetIndex(newSheetIndex); >+ return ref; >+ } else { >+ return null; >+ } >+ } else if (ptg instanceof Area3DPtg) { >+ Area3DPtg ref = (Area3DPtg)ptg; >+ Integer newSheetIndex = findNewSheetIndexDueToSheetMove(ref.getExternSheetIndex()); >+ if (newSheetIndex != null) { >+ ref.setExternSheetIndex(newSheetIndex); >+ return ref; >+ } else { >+ return null; >+ } >+ } > return null; > } > >diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java >index 65a5f21..cce570b 100644 >--- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java >+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java >@@ -1216,6 +1216,34 @@ public final class TestHSSFSheet extends BaseTestSheet { > > wb.close(); > } >+ @Test >+ public void test58746_ranges() throws IOException { >+ HSSFWorkbook wb = new HSSFWorkbook(); >+ >+ HSSFSheet first = wb.createSheet("first"); >+ first.createRow(0).createCell(0).setCellValue(1); >+ >+ HSSFSheet second = wb.createSheet("second"); >+ second.createRow(0).createCell(0).setCellValue(2); >+ >+ HSSFSheet third = wb.createSheet("third"); >+ HSSFRow row = third.createRow(0); >+ row.createCell(0).setCellFormula("SUM(first!A1:A2)"); >+ row.createCell(1).setCellFormula("SUM(second!A1:A2)"); >+ >+ // re-order for sheet "third" >+ wb.setSheetOrder("third", 0); >+ >+ // verify results >+ assertEquals("third", wb.getSheetAt(0).getSheetName()); >+ assertEquals("first", wb.getSheetAt(1).getSheetName()); >+ assertEquals("second", wb.getSheetAt(2).getSheetName()); >+ >+ assertEquals("SUM(first!A1:A2)", wb.getSheetAt(0).getRow(0).getCell(0).getCellFormula()); >+ assertEquals("SUM(second!A1:A2)", wb.getSheetAt(0).getRow(0).getCell(1).getCellFormula()); >+ >+ wb.close(); >+ } > > @Test > public void bug59135() throws IOException {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 59673
: 33926