From: PJ Fanning Date: Tue, 10 Aug 2021 19:40:03 +0000 (+0000) Subject: [bug-65490] add support for removing hyperlink directly from sheet X-Git-Tag: REL_5_1_0~43 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=bf6184fd805e4c3e70a58ed2cf61ca59f29bc263;p=poi.git [bug-65490] add support for removing hyperlink directly from sheet git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1892189 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index bf3e7396d3..41a434ae43 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -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 * diff --git a/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index ea5803bc90..febe557ad0 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -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"); } }