]> source.dussan.org Git - poi.git/commitdiff
Bug 57838: Also remove comments when removing a row
authorDominik Stadler <centic@apache.org>
Sun, 29 May 2016 21:33:47 +0000 (21:33 +0000)
committerDominik Stadler <centic@apache.org>
Sun, 29 May 2016 21:33:47 +0000 (21:33 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1746062 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFComment.java
test-data/spreadsheet/57838.xlsx [new file with mode: 0644]

index 98d7f6c1cf6330336040337a9b60d1f0a5de6deb..a328f2ad936e8dcc0198baaa36bb490531c9804d 100644 (file)
@@ -409,7 +409,6 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
     /**
      * Verify that none of the merged regions intersect a multi-cell array formula in this sheet
      *
-     * @param region
      * @throws IllegalStateException if candidate region intersects an existing array formula in this sheet
      */
     private void checkForMergedRegionsIntersectingArrayFormulas() {
@@ -1386,8 +1385,8 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
      * Rows between startRow and endRow that haven't been created are not included
      * in result unless createRowIfMissing is true
      *
-     * @param startRow the first row number in this sheet to return
-     * @param endRow the last row number in this sheet to return
+     * @param startRowNum the first row number in this sheet to return
+     * @param endRowNum the last row number in this sheet to return
      * @param createRowIfMissing
      * @return All rows between startRow and endRow, inclusive
      * @throws IllegalArgumentException if startRowNum and endRowNum are not in ascending order
@@ -1880,6 +1879,15 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
         int idx = _rows.headMap(row.getRowNum()).size();
         _rows.remove(row.getRowNum());
         worksheet.getSheetData().removeRow(idx);
+
+        // also remove any comment located in that row
+        if(sheetComments != null) {
+            for (CellAddress ref : getCellComments().keySet()) {
+                if (ref.getRow() == idx) {
+                    sheetComments.removeComment(ref);
+                }
+            }
+        }
     }
 
     /**
index 717fc4e6bca63e6dfb033a526636f1079b908c75..dac2095ae68af4a18fb3e3b72c41eacaab157aad 100644 (file)
 package org.apache.poi.xssf.usermodel;
 
 import static org.apache.poi.xssf.usermodel.XSSFRelation.NS_SPREADSHEETML;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.*;
 
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
+import java.io.*;
 
 import org.apache.poi.hssf.usermodel.HSSFRichTextString;
 import org.apache.poi.ss.usermodel.BaseTestCellComment;
@@ -314,4 +309,28 @@ public final class TestXSSFComment extends BaseTestCellComment  {
             wb.close();
         }
     }
+
+    @Test
+    public void bug57838DeleteRowsWthCommentsBug() throws IOException {
+        Workbook wb = XSSFTestDataSamples.openSampleWorkbook("57838.xlsx");
+        Sheet sheet=wb.getSheetAt(0);
+        Comment comment1 = sheet.getCellComment(new CellAddress(2, 1));
+        assertNotNull(comment1);
+        Comment comment2 = sheet.getCellComment(new CellAddress(2, 2));
+        assertNotNull(comment2);
+        Row row=sheet.getRow(2);
+        assertNotNull(row);
+
+        sheet.removeRow(row); // Remove row from index 2
+
+        row=sheet.getRow(2);
+        assertNull(row); // Row is null since we deleted it.
+
+        comment1 = sheet.getCellComment(new CellAddress(2, 1));
+        assertNull(comment1); // comment should be null but will fail due to bug
+        comment2 = sheet.getCellComment(new CellAddress(2, 2));
+        assertNull(comment2); // comment should be null but will fail due to bug
+
+        wb.close();
+    }
 }
diff --git a/test-data/spreadsheet/57838.xlsx b/test-data/spreadsheet/57838.xlsx
new file mode 100644 (file)
index 0000000..59366d0
Binary files /dev/null and b/test-data/spreadsheet/57838.xlsx differ