]> source.dussan.org Git - poi.git/commitdiff
[bug-65490] add support for removing hyperlink directly from sheet
authorPJ Fanning <fanningpj@apache.org>
Tue, 10 Aug 2021 19:40:03 +0000 (19:40 +0000)
committerPJ Fanning <fanningpj@apache.org>
Tue, 10 Aug 2021 19:40:03 +0000 (19:40 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1892189 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFBugs.java

index bf3e7396d3eedca5d934452b49f15e05ee88de1b..41a434ae43d8d7d1296ead63c3edefb599d73b30 100644 (file)
@@ -3356,15 +3356,29 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet  {
     }
 
     /**
-     * Register a hyperlink in the collection of hyperlinks on this sheet
+     * Register a hyperlink in the collection of hyperlinks on this sheet.
+     * Use {@link XSSFCell#setHyperlink(Hyperlink)} if the hyperlink is just for that one cell.
+     * Use this method if you want to add a Hyperlink that covers a range of sells. If you use
+     * this method, you will need to call {@link XSSFHyperlink#setCellReference(String)} to
+     * explicitly cell the value, eg B2 or B2:C3 (the 4 cells with B2 at top left and C3 at bottom right)
      *
      * @param hyperlink the link to add
      */
-    @Internal
     public void addHyperlink(XSSFHyperlink hyperlink) {
         hyperlinks.add(hyperlink);
     }
 
+    /**
+     * Remove a hyperlink in the collection of hyperlinks on this sheet.
+     * {@link XSSFCell#removeHyperlink()} can be used if the hyperlink is just for that one cell.
+     *
+     * @param hyperlink the link to remove
+     * @since POI 5.0.1
+     */
+    public void removeHyperlink(XSSFHyperlink hyperlink) {
+        hyperlinks.remove(hyperlink);
+    }
+
     /**
      * Removes a hyperlink in the collection of hyperlinks on this sheet
      *
index ea5803bc904a2d9d25303105211a889a0f5403bb..febe557ad033887b8e216bc9ef15fc75517d6a6b 100644 (file)
@@ -1790,29 +1790,35 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
         try (XSSFWorkbook wb = new XSSFWorkbook()) {
             XSSFSheet sheet = wb.createSheet();
             XSSFCreationHelper creationHelper = wb.getCreationHelper();
-            XSSFHyperlink hyperlink;
 
             // Try with a cell reference
-            hyperlink = creationHelper.createHyperlink(HyperlinkType.URL);
-            sheet.addHyperlink(hyperlink);
-            hyperlink.setAddress("http://myurl");
-            hyperlink.setCellReference("B4");
-            assertEquals(3, hyperlink.getFirstRow());
-            assertEquals(1, hyperlink.getFirstColumn());
-            assertEquals(3, hyperlink.getLastRow());
-            assertEquals(1, hyperlink.getLastColumn());
+            XSSFHyperlink hyperlink1 = creationHelper.createHyperlink(HyperlinkType.URL);
+            sheet.addHyperlink(hyperlink1);
+            hyperlink1.setAddress("http://myurl");
+            hyperlink1.setCellReference("B4");
+            assertEquals(3, hyperlink1.getFirstRow());
+            assertEquals(1, hyperlink1.getFirstColumn());
+            assertEquals(3, hyperlink1.getLastRow());
+            assertEquals(1, hyperlink1.getLastColumn());
 
             // Try with explicit rows / columns
-            hyperlink = creationHelper.createHyperlink(HyperlinkType.URL);
-            sheet.addHyperlink(hyperlink);
-            hyperlink.setAddress("http://myurl");
-            hyperlink.setFirstRow(5);
-            hyperlink.setFirstColumn(3);
-
-            assertEquals(5, hyperlink.getFirstRow());
-            assertEquals(3, hyperlink.getFirstColumn());
-            assertEquals(5, hyperlink.getLastRow());
-            assertEquals(3, hyperlink.getLastColumn());
+            XSSFHyperlink hyperlink2 = creationHelper.createHyperlink(HyperlinkType.URL);
+            sheet.addHyperlink(hyperlink2);
+            hyperlink2.setAddress("http://myurl");
+            hyperlink2.setFirstRow(5);
+            hyperlink2.setFirstColumn(3);
+
+            assertEquals(5, hyperlink2.getFirstRow());
+            assertEquals(3, hyperlink2.getFirstColumn());
+            assertEquals(5, hyperlink2.getLastRow());
+            assertEquals(3, hyperlink2.getLastColumn());
+
+            assertTrue(sheet.getHyperlinkList().contains(hyperlink1), "sheet contains hyperlink1");
+            assertTrue(sheet.getHyperlinkList().contains(hyperlink2), "sheet contains hyperlink2");
+
+            sheet.removeHyperlink(hyperlink1);
+            assertFalse(sheet.getHyperlinkList().contains(hyperlink1), "sheet no longer contains hyperlink1");
+            assertTrue(sheet.getHyperlinkList().contains(hyperlink2), "sheet still contains hyperlink2");
         }
     }