You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2008/12/30 10:24:16 UTC

svn commit: r730076 - in /poi/trunk/src: java/org/apache/poi/hssf/usermodel/HSSFSheet.java testcases/org/apache/poi/hssf/data/46445.xls testcases/org/apache/poi/hssf/usermodel/TestBugs.java testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java

Author: yegor
Date: Tue Dec 30 01:24:15 2008
New Revision: 730076

URL: http://svn.apache.org/viewvc?rev=730076&view=rev
Log:
move hyperlinks when shifting rows

Added:
    poi/trunk/src/testcases/org/apache/poi/hssf/data/46445.xls   (with props)
Modified:
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java?rev=730076&r1=730075&r2=730076&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java Tue Dec 30 01:24:15 2008
@@ -1187,6 +1187,12 @@
                 cellRecord.setRow( rowNum + n );
                 row2Replace.createCellFromRecord( cellRecord );
                 sheet.addValueRecord( rowNum + n, cellRecord );
+
+                HSSFHyperlink link = cell.getHyperlink();
+                if(link != null){
+                    link.setFirstRow(link.getFirstRow() + n);
+                    link.setLastRow(link.getLastRow() + n);
+                }
             }
             // Now zap all the cells in the source row
             row.removeAllCells();

Added: poi/trunk/src/testcases/org/apache/poi/hssf/data/46445.xls
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/data/46445.xls?rev=730076&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/src/testcases/org/apache/poi/hssf/data/46445.xls
------------------------------------------------------------------------------
    svn:executable = *

Propchange: poi/trunk/src/testcases/org/apache/poi/hssf/data/46445.xls
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java?rev=730076&r1=730075&r2=730076&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java Tue Dec 30 01:24:15 2008
@@ -1642,4 +1642,28 @@
         assertEquals("\u0161\u017E\u010D\u0148\u0159", sheet.getRow(1).getCell(0).getStringCellValue());
     }
 
+    /**
+     * Multiple calls of HSSFWorkbook.write result in corrupted xls
+     */
+    public void test32191() throws IOException {
+        HSSFWorkbook wb = openSample("27394.xls");
+
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        wb.write(out);
+        out.close();
+        int size1 = out.size();
+        
+        out = new ByteArrayOutputStream();
+        wb.write(out);
+        out.close();
+        int size2 = out.size();
+
+        assertEquals(size1, size2);
+        out = new ByteArrayOutputStream();
+        wb.write(out);
+        out.close();
+        int size3 = out.size();
+        assertEquals(size2, size3);
+
+    }
 }

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java?rev=730076&r1=730075&r2=730076&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java Tue Dec 30 01:24:15 2008
@@ -184,4 +184,49 @@
         assertNotNull(link);
         assertEquals("http://poi.apache.org/hssf/", link.getAddress());
     }
+
+    /**
+     * Test that HSSFSheet#shiftRows moves hyperlinks,
+     * see bugs #46445 and #29957
+     */
+    public void testShiftRows(){
+        HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("46445.xls");
+
+
+        HSSFSheet sheet = wb.getSheetAt(0);
+
+        //verify existing hyperlink in A3
+        HSSFCell cell1 = sheet.getRow(2).getCell(0);
+        HSSFHyperlink link1 = cell1.getHyperlink();
+        assertNotNull(link1);
+        assertEquals(2, link1.getFirstRow());
+        assertEquals(2, link1.getLastRow());
+
+        //assign a hyperlink to A4
+        HSSFHyperlink link2 = new HSSFHyperlink(HSSFHyperlink.LINK_DOCUMENT);
+        link2.setAddress("Sheet2!A2");
+        HSSFCell cell2 = sheet.getRow(3).getCell(0);
+        cell2.setHyperlink(link2);
+        assertEquals(3, link2.getFirstRow());
+        assertEquals(3, link2.getLastRow());
+
+        //move the 3rd row two rows down
+        sheet.shiftRows(sheet.getFirstRowNum(), sheet.getLastRowNum(), 2);
+
+        //cells A3 and A4 don't contain hyperlinks anymore
+        assertNull(sheet.getRow(2).getCell(0).getHyperlink());
+        assertNull(sheet.getRow(3).getCell(0).getHyperlink());
+
+        //the first hypelink now belongs to A5
+        HSSFHyperlink link1_shifted = sheet.getRow(2+2).getCell(0).getHyperlink();
+        assertNotNull(link1_shifted);
+        assertEquals(4, link1_shifted.getFirstRow());
+        assertEquals(4, link1_shifted.getLastRow());
+
+        //the second hypelink now belongs to A6
+        HSSFHyperlink link2_shifted = sheet.getRow(3+2).getCell(0).getHyperlink();
+        assertNotNull(link2_shifted);
+        assertEquals(5, link2_shifted.getFirstRow());
+        assertEquals(5, link2_shifted.getLastRow());
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org