// i.e. when shifting down, start from down and go up, when shifting up, vice-versa
SortedMap<XSSFComment, Integer> commentsToShift = new TreeMap<XSSFComment, Integer>(new Comparator<XSSFComment>() {
public int compare(XSSFComment o1, XSSFComment o2) {
- int row1 = new CellReference(o1.getCTComment().getRef()).getRow();
- int row2 = new CellReference(o2.getCTComment().getRef()).getRow();
+ int row1 = o1.getRow();
+ int row2 = o2.getRow();
if(row1 == row2) {
- return 0;
+ // ordering is not important when row is equal, but don't return zero to still
+ // get multiple comments per row into the map
+ return o1.hashCode() - o2.hashCode();
}
// when shifting down, sort higher row-values first
wb.removeSheetAt(sn);
}
}
+
+ public void testBug57828_OnlyOneCommentShiftedInRow() throws IOException {
+ XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("57828.xlsx");
+ XSSFSheet sheet = wb.getSheetAt(0);
+
+ Comment comment1 = sheet.getCellComment(2, 1);
+ assertNotNull(comment1);
+
+ Comment comment2 = sheet.getCellComment(2, 2);
+ assertNotNull(comment2);
+
+ Comment comment3 = sheet.getCellComment(1, 1);
+ assertNull("NO comment in (1,1) and it should be null", comment3);
+
+ sheet.shiftRows(2, 2, -1);
+
+ comment3 = sheet.getCellComment(1, 1);
+ assertNotNull("Comment in (2,1) moved to (1,1) so its not null now.", comment3);
+
+ comment1 = sheet.getCellComment(2, 1);
+ assertNull("No comment currently in (2,1) and hence it is null", comment1);
+
+ comment2 = sheet.getCellComment(1, 2);
+ assertNotNull("Comment in (2,2) should have moved as well because of shift rows. But its not", comment2);
+
+// OutputStream stream = new FileOutputStream("/tmp/57828.xlsx");
+// try {
+// wb.write(stream);
+// } finally {
+// stream.close();
+// }
+
+ wb.close();
+ }
}