From 45de2e444a4b503bab1bcb81f2c408567fc347eb Mon Sep 17 00:00:00 2001 From: Javen O'Neal Date: Thu, 19 Jan 2017 08:09:11 +0000 Subject: [PATCH] bug 60601: hyperlinks have to be removed one by one to avoid other errors git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1779429 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/xssf/usermodel/XSSFSheet.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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 b7b30126c..d6fc4353e 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -3485,7 +3485,18 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { worksheet.getHyperlinks().setHyperlinkArray(ctHls); } else { - worksheet.unsetHyperlinks(); + // For some reason, we have to remove the hyperlinks one by one from the CTHyperlinks array + // rather than unsetting or resetting the hyperlink array. + //worksheet.getHyperlinks().setHyperlinkArray(new CTHyperlink[0]); + //worksheet.unsetHyperlinks(); + if (worksheet.getHyperlinks() != null) { + final int count = worksheet.getHyperlinks().sizeOfHyperlinkArray(); + for (int i=count-1; i>=0; i--) { + worksheet.getHyperlinks().removeHyperlink(i); + } + } else { + // nothing to do + } } int minCell=Integer.MAX_VALUE, maxCell=Integer.MIN_VALUE;