diff options
author | Dominik Stadler <centic@apache.org> | 2015-10-23 12:11:40 +0000 |
---|---|---|
committer | Dominik Stadler <centic@apache.org> | 2015-10-23 12:11:40 +0000 |
commit | 73ae5a04cb99d0fcccdc56feddc010023a3c08e0 (patch) | |
tree | e1da9a0c27b5af32ac5ce35329fc29f719c2aa40 /src/java/org | |
parent | 45e79a04099a48b59fe36db7b4afeb6a48b0b530 (diff) | |
download | poi-73ae5a04cb99d0fcccdc56feddc010023a3c08e0.tar.gz poi-73ae5a04cb99d0fcccdc56feddc010023a3c08e0.zip |
Bug 58085: removing sheet breaks other existing sheet references
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1710193 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org')
-rw-r--r-- | src/java/org/apache/poi/hssf/model/InternalWorkbook.java | 6 | ||||
-rw-r--r-- | src/java/org/apache/poi/hssf/record/ExternSheetRecord.java | 9 |
2 files changed, 5 insertions, 10 deletions
diff --git a/src/java/org/apache/poi/hssf/model/InternalWorkbook.java b/src/java/org/apache/poi/hssf/model/InternalWorkbook.java index c92c897094..8631833653 100644 --- a/src/java/org/apache/poi/hssf/model/InternalWorkbook.java +++ b/src/java/org/apache/poi/hssf/model/InternalWorkbook.java @@ -777,9 +777,9 @@ public final class InternalWorkbook { if (linkTable != null) { // also tell the LinkTable about the removed sheet - // +1 because we already removed it from the count of sheets! - for(int i = sheetIndex+1;i < getNumSheets()+1;i++) { - linkTable.removeSheet(i); + //index hasn't change in the linktable + if (linkTable != null) { + linkTable.removeSheet(sheetIndex); } } } diff --git a/src/java/org/apache/poi/hssf/record/ExternSheetRecord.java b/src/java/org/apache/poi/hssf/record/ExternSheetRecord.java index 636b6b0da0..61dfc93e0f 100644 --- a/src/java/org/apache/poi/hssf/record/ExternSheetRecord.java +++ b/src/java/org/apache/poi/hssf/record/ExternSheetRecord.java @@ -174,22 +174,17 @@ public class ExternSheetRecord extends StandardRecord { public void removeSheet(int sheetIdx) { int nItems = _list.size(); - int toRemove = -1; for (int i = 0; i < nItems; i++) { RefSubRecord refSubRecord = _list.get(i); if(refSubRecord.getFirstSheetIndex() == sheetIdx && refSubRecord.getLastSheetIndex() == sheetIdx) { - toRemove = i; + // removing the entry would mess up the sheet index in Formula of NameRecord + _list.set(i, new RefSubRecord(refSubRecord.getExtBookIndex(), -1, -1)); } else if (refSubRecord.getFirstSheetIndex() > sheetIdx && refSubRecord.getLastSheetIndex() > sheetIdx) { _list.set(i, new RefSubRecord(refSubRecord.getExtBookIndex(), refSubRecord.getFirstSheetIndex()-1, refSubRecord.getLastSheetIndex()-1)); } } - - // finally remove entries for sheet indexes that we remove - if(toRemove != -1) { - _list.remove(toRemove); - } } /** |