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