From dcf43f75bd8f0f862530d77aca0946e3957644bc Mon Sep 17 00:00:00 2001 From: Javen O'Neal Date: Sun, 17 Jul 2016 04:41:20 +0000 Subject: [PATCH] bug 59872: add Sheet.getHyperlink(CellAddress) git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1753009 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hssf/usermodel/HSSFSheet.java | 11 ++++++++++ .../org/apache/poi/ss/usermodel/Sheet.java | 8 +++++++ .../apache/poi/xssf/streaming/SXSSFSheet.java | 11 ++++++++++ .../apache/poi/xssf/usermodel/XSSFSheet.java | 13 +++++++++++- .../poi/ss/usermodel/BaseTestSheet.java | 21 +++++++++++++++++++ 5 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java index 3ff7005ba4..e9e3cf6f75 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java @@ -2215,6 +2215,17 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { return null; } + /** + * Get a Hyperlink in this sheet located in a cell specified by {code addr} + * + * @param addr The address of the cell containing the hyperlink + * @return hyperlink if there is a hyperlink anchored at {@code addr}; otherwise returns {@code null} + */ + @Override + public HSSFHyperlink getHyperlink(CellAddress addr) { + return getHyperlink(addr.getRow(), addr.getColumn()); + } + /** * Get a list of Hyperlinks in this sheet * diff --git a/src/java/org/apache/poi/ss/usermodel/Sheet.java b/src/java/org/apache/poi/ss/usermodel/Sheet.java index 74ad8690e2..3d449348ec 100644 --- a/src/java/org/apache/poi/ss/usermodel/Sheet.java +++ b/src/java/org/apache/poi/ss/usermodel/Sheet.java @@ -1158,6 +1158,14 @@ public interface Sheet extends Iterable { */ public Hyperlink getHyperlink(int row, int column); + /** + * Get a Hyperlink in this sheet located in a cell specified by {code addr} + * + * @param addr The address of the cell containing the hyperlink + * @return hyperlink if there is a hyperlink anchored at {@code addr}; otherwise returns {@code null} + */ + public Hyperlink getHyperlink(CellAddress addr); + /** * Get a list of Hyperlinks in this sheet * diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java index 41e4e17f21..eeb321d924 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java @@ -1665,6 +1665,17 @@ public class SXSSFSheet implements Sheet return _sh.getHyperlink(row, column); } + /** + * Get a Hyperlink in this sheet located in a cell specified by {code addr} + * + * @param addr The address of the cell containing the hyperlink + * @return hyperlink if there is a hyperlink anchored at {@code addr}; otherwise returns {@code null} + */ + @Override + public XSSFHyperlink getHyperlink(CellAddress addr) { + return _sh.getHyperlink(addr); + } + /** * Get a list of Hyperlinks in this sheet * diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index 44474b0b4c..771986b263 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -806,7 +806,18 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { */ @Override public XSSFHyperlink getHyperlink(int row, int column) { - String ref = new CellReference(row, column).formatAsString(); + return getHyperlink(new CellAddress(row, column)); + } + + /** + * Get a Hyperlink in this sheet located in a cell specified by {code addr} + * + * @param addr The address of the cell containing the hyperlink + * @return hyperlink if there is a hyperlink anchored at {@code addr}; otherwise returns {@code null} + */ + @Override + public XSSFHyperlink getHyperlink(CellAddress addr) { + String ref = addr.formatAsString(); for(XSSFHyperlink hyperlink : hyperlinks) { if(hyperlink.getCellRef().equals(ref)) { return hyperlink; diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java index b7b85cf730..65565f17bf 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java @@ -1208,6 +1208,27 @@ public abstract class BaseTestSheet { workbook.close(); wb.close(); } + + @Test + public void getHyperlink() throws IOException { + Workbook workbook = _testDataProvider.createWorkbook(); + Hyperlink hyperlink = workbook.getCreationHelper().createHyperlink(Hyperlink.LINK_URL); + hyperlink.setAddress("https://poi.apache.org/"); + + Sheet sheet = workbook.createSheet(); + Cell cell = sheet.createRow(5).createCell(1); + + assertEquals("list size before add", 0, sheet.getHyperlinkList().size()); + cell.setHyperlink(hyperlink); + assertEquals("list size after add", 1, sheet.getHyperlinkList().size()); + + assertEquals("list", hyperlink, sheet.getHyperlinkList().get(0)); + assertEquals("row, col", hyperlink, sheet.getHyperlink(5, 1)); + assertEquals("addr", hyperlink, sheet.getHyperlink(new CellAddress("B4"))); + assertEquals("no hyperlink at A1", null, sheet.getHyperlink(CellAddress.A1)); + + workbook.close(); + } @Test -- 2.39.5