From abe46f40ed865255bf4cce97d82f02b9ba0f0935 Mon Sep 17 00:00:00 2001 From: Javen O'Neal Date: Sun, 11 Sep 2016 04:05:42 +0000 Subject: [PATCH] bug 52425: Error adding Comments into cloned Sheets; patch from Daniel git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1760221 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/xssf/usermodel/XSSFSheet.java | 7 +-- .../poi/xssf/usermodel/TestXSSFSheet.java | 45 ++++++++++++++++++ test-data/spreadsheet/52425.xlsx | Bin 0 -> 9439 bytes 3 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 test-data/spreadsheet/52425.xlsx diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index 5f1da12ecc..98711c9dda 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -591,20 +591,21 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { } } else { //search the referenced drawing in the list of the sheet's relations + final String id = ctDrawing.getId(); for (RelationPart rp : getRelationParts()){ POIXMLDocumentPart p = rp.getDocumentPart(); if(p instanceof XSSFVMLDrawing) { XSSFVMLDrawing dr = (XSSFVMLDrawing)p; String drId = rp.getRelationship().getId(); - if(drId.equals(ctDrawing.getId())){ + if (drId.equals(id)) { drawing = dr; break; } - break; + // do not break here since drawing has not been found yet (see bug 52425) } } if(drawing == null){ - logger.log(POILogger.ERROR, "Can't find VML drawing with id=" + ctDrawing.getId() + " in the list of the sheet's relationships"); + logger.log(POILogger.ERROR, "Can't find VML drawing with id=" + id + " in the list of the sheet's relationships"); } } return drawing; diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index 689e999bcb..3f7be066d1 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -47,6 +47,9 @@ import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellCopyPolicy; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.ClientAnchor; +import org.apache.poi.ss.usermodel.Comment; +import org.apache.poi.ss.usermodel.CreationHelper; +import org.apache.poi.ss.usermodel.Drawing; import org.apache.poi.ss.usermodel.FormulaError; import org.apache.poi.ss.usermodel.IgnoredErrorType; import org.apache.poi.ss.usermodel.IndexedColors; @@ -1975,4 +1978,46 @@ public final class TestXSSFSheet extends BaseTestXSheet { wb.close(); } } + + /** + * See bug #52425 + */ + @Test + public void testInsertCommentsToClonedSheet() { + Workbook wb = XSSFTestDataSamples.openSampleWorkbook("52425.xlsx"); + CreationHelper helper = wb.getCreationHelper(); + Sheet sheet2 = wb.createSheet("Sheet 2"); + Sheet sheet3 = wb.cloneSheet(0); + wb.setSheetName(2, "Sheet 3"); + + // Adding Comment to new created Sheet 2 + addComments(helper, sheet2); + // Adding Comment to cloned Sheet 3 + addComments(helper, sheet3); + } + + private void addComments(CreationHelper helper, Sheet sheet) { + Drawing drawing = sheet.createDrawingPatriarch(); + + for (int i = 0; i < 2; i++) { + ClientAnchor anchor = helper.createClientAnchor(); + anchor.setCol1(0); + anchor.setRow1(0 + i); + anchor.setCol2(2); + anchor.setRow2(3 + i); + + Comment comment = drawing.createCellComment(anchor); + comment.setString(helper.createRichTextString("BugTesting")); + + Row row = sheet.getRow(0 + i); + if (row == null) + row = sheet.createRow(0 + i); + Cell cell = row.getCell(0); + if (cell == null) + cell = row.createCell(0); + + cell.setCellComment(comment); + } + + } } diff --git a/test-data/spreadsheet/52425.xlsx b/test-data/spreadsheet/52425.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0659822f641489044f8688834d4691477ad54ce1 GIT binary patch literal 9439 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