]> source.dussan.org Git - poi.git/commitdiff
Bug 56017: Fix comment-ref when shiftig rows with comments, this probably does not...
authorDominik Stadler <centic@apache.org>
Sun, 2 Feb 2014 10:34:42 +0000 (10:34 +0000)
committerDominik Stadler <centic@apache.org>
Sun, 2 Feb 2014 10:34:42 +0000 (10:34 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1563587 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

index 25ffd02436e4b11d9d6dfcb4bec3a872799806eb..64f32e3a8a1de7bc8d54785dbaad1842e27461ab 100644 (file)
@@ -42,16 +42,7 @@ import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
 import org.apache.poi.ss.SpreadsheetVersion;
 import org.apache.poi.ss.formula.FormulaShifter;
 import org.apache.poi.ss.formula.SheetNameFormatter;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellRange;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.DataValidation;
-import org.apache.poi.ss.usermodel.DataValidationHelper;
-import org.apache.poi.ss.usermodel.Footer;
-import org.apache.poi.ss.usermodel.Header;
-import org.apache.poi.ss.usermodel.IndexedColors;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.ss.util.CellRangeAddressList;
 import org.apache.poi.ss.util.CellReference;
@@ -67,48 +58,7 @@ import org.apache.poi.xssf.usermodel.helpers.XSSFRowShifter;
 import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlOptions;
 import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelationshipId;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTAutoFilter;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBreak;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCalcPr;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCell;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCellFormula;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComment;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCommentList;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataValidation;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataValidations;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDrawing;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHeaderFooter;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHyperlink;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTLegacyDrawing;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTMergeCell;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTMergeCells;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTOutlinePr;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageBreak;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageMargins;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageSetUpPr;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPane;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPrintOptions;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSelection;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetCalcPr;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetFormatPr;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetPr;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetProtection;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetView;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetViews;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTablePart;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableParts;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCalcMode;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCellFormulaType;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPane;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPaneState;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnsignedShortHex;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
 
 /**
  * High level representation of a SpreadsheetML worksheet.
@@ -2440,10 +2390,12 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
                 //TODO shift Note's anchor in the associated /xl/drawing/vmlDrawings#.vml
                 CTCommentList lst = sheetComments.getCTComments().getCommentList();
                 for (CTComment comment : lst.getCommentArray()) {
-                    CellReference ref = new CellReference(comment.getRef());
+                    String oldRef = comment.getRef();
+                    CellReference ref = new CellReference(oldRef);
                     if(ref.getRow() == rownum){
                         ref = new CellReference(rownum + n, ref.getCol());
                         comment.setRef(ref.formatAsString());
+                        sheetComments.referenceUpdated(oldRef, comment);
                     }
                 }
             }
index a5050c92ac42dbbfbe5fbf1f9ae1878a6046eff8..d7bfc2f769a19aa8fa7ee72976d67f3442b1e110 100644 (file)
@@ -21,6 +21,7 @@ import java.io.IOException;
 
 import org.apache.poi.ss.usermodel.BaseTestSheetShiftRows;
 import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Comment;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
@@ -141,4 +142,49 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
                verifyCellContent(readSheet, 7, "6.0");
                verifyCellContent(readSheet, 8, "8.0");
        }
+       
+       public void testBug56017() throws IOException {
+           Workbook wb = XSSFTestDataSamples.openSampleWorkbook("56017.xlsx");
+
+        Sheet sheet = wb.getSheetAt(0);
+
+        Comment comment = sheet.getCellComment(0, 0);
+        assertNotNull(comment);
+        assertEquals("Amdocs", comment.getAuthor());
+        assertEquals("Amdocs:\ntest\n", comment.getString().getString());
+        
+        sheet.shiftRows(0, 1, 1);
+
+        // comment in row 0 is gone
+        comment = sheet.getCellComment(0, 0);
+        assertNull(comment);
+        
+        // comment is now in row 1
+        comment = sheet.getCellComment(1, 0);
+        assertNotNull(comment);
+        assertEquals("Amdocs", comment.getAuthor());
+        assertEquals("Amdocs:\ntest\n", comment.getString().getString());
+        
+//        FileOutputStream outputStream = new FileOutputStream("/tmp/56017.xlsx");
+//        try {
+//            wb.write(outputStream);
+//        } finally {
+//            outputStream.close();
+//        }
+        
+        Workbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(wb);
+        assertNotNull(wbBack);
+
+        Sheet sheetBack = wbBack.getSheetAt(0);
+
+        // comment in row 0 is gone
+        comment = sheetBack.getCellComment(0, 0);
+        assertNull(comment);
+
+        // comment is now in row 1
+        comment = sheetBack.getCellComment(1, 0);
+        assertNotNull(comment);
+        assertEquals("Amdocs", comment.getAuthor());
+        assertEquals("Amdocs:\ntest\n", comment.getString().getString());
+       }
 }