diff --git a/src/java/org/apache/poi/hssf/model/LinkTable.java b/src/java/org/apache/poi/hssf/model/LinkTable.java index 7184ccc98d..cb64d6dca9 100644 --- a/src/java/org/apache/poi/hssf/model/LinkTable.java +++ b/src/java/org/apache/poi/hssf/model/LinkTable.java @@ -30,6 +30,7 @@ import org.apache.poi.hssf.record.ExternalNameRecord; import org.apache.poi.hssf.record.NameCommentRecord; import org.apache.poi.hssf.record.NameRecord; import org.apache.poi.hssf.record.Record; +import org.apache.poi.hssf.record.SSTRecord; import org.apache.poi.hssf.record.SupBookRecord; import org.apache.poi.ss.formula.SheetNameFormatter; import org.apache.poi.ss.formula.ptg.Area3DPtg; @@ -271,7 +272,10 @@ final class LinkTable { int idx = findFirstRecordLocBySid(CountryRecord.sid); if (idx < 0) { - throw new RuntimeException("CountryRecord not found"); + idx = findFirstRecordLocBySid(SSTRecord.sid) - 1; + if (idx < 0) { + throw new RuntimeException("CountryRecord or SSTRecord not found"); + } } _workbookRecordList.add(idx + 1, _externSheetRecord); _workbookRecordList.add(idx + 1, supbook); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index cd2bfe32bc..1a09c5596b 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -59,7 +59,6 @@ import org.apache.poi.hssf.record.CellValueRecordInterface; import org.apache.poi.hssf.record.CommonObjectDataSubRecord; import org.apache.poi.hssf.record.EmbeddedObjectRefSubRecord; import org.apache.poi.hssf.record.NameRecord; -import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.TabIdRecord; import org.apache.poi.hssf.record.UnknownRecord; import org.apache.poi.hssf.record.aggregates.FormulaRecordAggregate; @@ -2887,6 +2886,11 @@ public final class TestBugs extends BaseTestBugzillaIssues { } } + @Test + public void test55505() throws IOException { + simpleTest("bug55505.xls"); + } + @Test public void test63940() throws IOException { simpleTest("SUBSTITUTE.xls"); @@ -2910,6 +2914,11 @@ public final class TestBugs extends BaseTestBugzillaIssues { HSSFRow r = s.createRow(10_000); HSSFCell c = r.createCell(0); c.setCellValue(10); + + HSSFSheet tmpSheet = wb1.createSheet("POITESTSHEET"); + tmpSheet.createRow(10).createCell(10).setCellValue("Test"); + wb1.removeSheetAt(wb1.getSheetIndex(tmpSheet)); + simpleTestHelper(wb1, fileName); try (HSSFWorkbook wb2 = writeOutAndReadBack(wb1)) { diff --git a/test-data/spreadsheet/bug55505.xls b/test-data/spreadsheet/bug55505.xls new file mode 100644 index 0000000000..dbbf246b17 Binary files /dev/null and b/test-data/spreadsheet/bug55505.xls differ