diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 2ca1abd0c..6019d3c14 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 51470 - avoid exception when cloning XSSF sheets with background images 51481 - Fixed autofilters in HSSF to avoid warnings in Excel 2007 51533 - Avoid exception when changing name of a sheet containing shared formulas Support for appending images to existing drawings in HSSF diff --git a/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java b/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java index d81391035..311573618 100644 --- a/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java +++ b/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java @@ -233,7 +233,7 @@ public class POIXMLDocumentPart { * * @param part the child to add */ - protected final void addRelation(String id,POIXMLDocumentPart part){ + public final void addRelation(String id,POIXMLDocumentPart part){ relations.put(id,part); part.incrementRelationCounter(); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java index d8689d87a..9b0c7219a 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java @@ -385,6 +385,15 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable rels = srcSheet.getRelations(); + for(POIXMLDocumentPart r : rels) { + PackageRelationship rel = r.getPackageRelationship(); + clonedSheet.getPackagePart().addRelationship(rel.getTargetURI(), rel.getTargetMode(),rel.getRelationshipType()); + clonedSheet.addRelation(rel.getId(), r); + } + return clonedSheet; } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index 70b38b636..364e4120d 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -1157,4 +1157,16 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { // assertEquals("FFEEECE1", cA4_EEECE1.getCellStyle().getFillForegroundXSSFColor().getARGBHex()); // assertEquals("FF1F497D", cA5_1F497D.getCellStyle().getFillForegroundXSSFColor().getARGBHex()); } + + public void test51470() throws Exception { + XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("51470.xlsx"); + XSSFSheet sh0 = wb.getSheetAt(0); + XSSFSheet sh1 = wb.cloneSheet(0); + List rels0 = sh0.getRelations(); + List rels1 = sh1.getRelations(); + assertEquals(1, rels0.size()); + assertEquals(1, rels1.size()); + + assertEquals(rels0.get(0).getPackageRelationship(), rels1.get(0).getPackageRelationship()); + } } diff --git a/test-data/spreadsheet/51470.xlsx b/test-data/spreadsheet/51470.xlsx new file mode 100644 index 000000000..01768afde Binary files /dev/null and b/test-data/spreadsheet/51470.xlsx differ