From 70cc2bce032dbd3358f1c2be2f273e899f1c0c7b Mon Sep 17 00:00:00 2001 From: Javen O'Neal Date: Thu, 19 Jan 2017 07:44:25 +0000 Subject: [PATCH] bug 60601: unlink hyperlinks from a sheet if all hyperlinks have been removed. Patch from Joachim Piketz git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1779426 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/xssf/usermodel/XSSFSheet.java | 3 +++ .../poi/ss/usermodel/BaseTestSheet.java | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+) 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 bde93d663..b7b30126c 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -3484,6 +3484,9 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { } worksheet.getHyperlinks().setHyperlinkArray(ctHls); } + else { + worksheet.unsetHyperlinks(); + } int minCell=Integer.MAX_VALUE, maxCell=Integer.MIN_VALUE; for(XSSFRow row : _rows.values()){ diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java index 4e7179109..8e010a6c0 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java @@ -1231,6 +1231,29 @@ public abstract class BaseTestSheet { workbook.close(); } + + @Test + public void removeAllHyperlinks() throws IOException { + Workbook workbook = _testDataProvider.createWorkbook(); + Hyperlink hyperlink = workbook.getCreationHelper().createHyperlink(HyperlinkType.URL); + hyperlink.setAddress("https://poi.apache.org/"); + Sheet sheet = workbook.createSheet(); + Cell cell = sheet.createRow(5).createCell(1); + cell.setHyperlink(hyperlink); + + assertEquals(1, workbook.getSheetAt(0).getHyperlinkList().size()); + // Save a workbook with a hyperlink + Workbook workbook2 = _testDataProvider.writeOutAndReadBack(workbook); + assertEquals(1, workbook2.getSheetAt(0).getHyperlinkList().size()); + + // Remove all hyperlinks from a saved workbook + workbook2.getSheetAt(0).getRow(5).getCell(1).removeHyperlink(); + assertEquals(0, workbook2.getSheetAt(0).getHyperlinkList().size()); + + // Verify that hyperlink was removed from workbook after writing out + Workbook workbook3 = _testDataProvider.writeOutAndReadBack(workbook2); + assertEquals(0, workbook3.getSheetAt(0).getHyperlinkList().size()); + } @Test