aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2015-10-23 12:11:40 +0000
committerDominik Stadler <centic@apache.org>2015-10-23 12:11:40 +0000
commit73ae5a04cb99d0fcccdc56feddc010023a3c08e0 (patch)
treee1da9a0c27b5af32ac5ce35329fc29f719c2aa40 /src/java/org
parent45e79a04099a48b59fe36db7b4afeb6a48b0b530 (diff)
downloadpoi-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.java6
-rw-r--r--src/java/org/apache/poi/hssf/record/ExternSheetRecord.java9
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);
- }
}
/**