]> source.dussan.org Git - poi.git/commitdiff
Fix bug 57828, shifting more than one commit per row did not work.
authorDominik Stadler <centic@apache.org>
Mon, 20 Apr 2015 20:13:33 +0000 (20:13 +0000)
committerDominik Stadler <centic@apache.org>
Mon, 20 Apr 2015 20:13:33 +0000 (20:13 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1674975 13f79535-47bb-0310-9956-ffa450edef68

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

index f24a331940fb14a5d69efa30d786cd955f4476a1..189922ad475159ac75f86b61a2b00e9288585c7b 100644 (file)
@@ -2596,11 +2596,13 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
         // 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
index e915ee0d4d00ddb800010c72f94a38431b5fe7eb..89364463b4abbc398460889c50a8bdc3113877d7 100644 (file)
@@ -332,4 +332,38 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
             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();
+    }
 }
diff --git a/test-data/spreadsheet/57828.xlsx b/test-data/spreadsheet/57828.xlsx
new file mode 100644 (file)
index 0000000..c750a09
Binary files /dev/null and b/test-data/spreadsheet/57828.xlsx differ