/**
* 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() {
* 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
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);
+ }
+ }
+ }
}
/**
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;
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();
+ }
}