Bug 57838: Also remove comments when removing a row

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1746062 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2016-05-29 21:33:47 +00:00
parent 170fa46359
commit 0fdbc396e4
3 changed files with 37 additions and 10 deletions

View 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);
}
}
}
}
/**

View File

@ -18,14 +18,9 @@
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();
}
}

Binary file not shown.