]> source.dussan.org Git - poi.git/commitdiff
Avoid NullPointerException when cloning sheets where there is no drawing patriarch
authorDominik Stadler <centic@apache.org>
Thu, 21 Oct 2021 14:17:31 +0000 (14:17 +0000)
committerDominik Stadler <centic@apache.org>
Thu, 21 Oct 2021 14:17:31 +0000 (14:17 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894450 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
test-data/spreadsheet/no_drawing_patriarch.xlsx [new file with mode: 0644]

index 2b67475b0beb33376ab14ad149d97ead7117f703..8b80963730237b1be39b72275031fc89a0780650 100644 (file)
@@ -677,19 +677,22 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Date1904Su
             clonedDg.getCTDrawing().set(dg.getCTDrawing().copy());
 
             // Clone drawing relations
-            List<RelationPart> srcRels = srcSheet.getDrawingPatriarch().getRelationParts();
-            for (RelationPart rp : srcRels) {
-                POIXMLDocumentPart r = rp.getDocumentPart();
-                if (r instanceof XSSFChart) {
-                    // Replace chart relation part with new relationship, cloning the chart's content
-                    RelationPart chartPart = clonedDg.createChartRelationPart();
-                    XSSFChart chart = chartPart.getDocumentPart();
-                    chart.importContent((XSSFChart)r);
-                    chart.replaceReferences(clonedSheet);
-                } else {
-                    addRelation(rp, clonedDg);
-                }
-            }
+                       XSSFDrawing drawingPatriarch = srcSheet.getDrawingPatriarch();
+                       if (drawingPatriarch != null) {
+                               List<RelationPart> srcRels = drawingPatriarch.getRelationParts();
+                               for (RelationPart rp : srcRels) {
+                                       POIXMLDocumentPart r = rp.getDocumentPart();
+                                       if (r instanceof XSSFChart) {
+                                               // Replace chart relation part with new relationship, cloning the chart's content
+                                               RelationPart chartPart = clonedDg.createChartRelationPart();
+                                               XSSFChart chart = chartPart.getDocumentPart();
+                                               chart.importContent((XSSFChart) r);
+                                               chart.replaceReferences(clonedSheet);
+                                       } else {
+                                               addRelation(rp, clonedDg);
+                                       }
+                               }
+                       }
         }
         return clonedSheet;
     }
diff --git a/test-data/spreadsheet/no_drawing_patriarch.xlsx b/test-data/spreadsheet/no_drawing_patriarch.xlsx
new file mode 100644 (file)
index 0000000..47f34a0
Binary files /dev/null and b/test-data/spreadsheet/no_drawing_patriarch.xlsx differ