From: PJ Fanning Date: Tue, 22 Mar 2022 12:02:11 +0000 (+0000) Subject: [bug-65973] partial fix for removing hyperlinks that span multiple cells X-Git-Tag: REL_5_2_3~408 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=0c4fec35283c8d12656f9ea8382aadae77df44f4;p=poi.git [bug-65973] partial fix for removing hyperlinks that span multiple cells git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1899130 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 27bd123c23..50e66f2f99 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 @@ -3083,11 +3083,20 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet, OoxmlSheetEx // also remove any hyperlinks associated with this row if (hyperlinks != null) { - for (XSSFHyperlink link : new ArrayList<>(hyperlinks)) { + for (XSSFHyperlink link : getHyperlinkList()) { CellRangeAddress range = CellRangeAddress.valueOf(link.getCellRef()); //TODO handle case where hyperlink ref spans many rows (https://bz.apache.org/bugzilla/show_bug.cgi?id=65973) + //but where only some rows are being removed and others are not (range will need to be modified) if (range.getFirstRow() == range.getLastRow() && rowsToRemoveSet.contains(range.getFirstRow())) { hyperlinks.remove(link); + } else if (range.getFirstRow() != range.getLastRow()) { + boolean toRemove = true; + for (int i = range.getFirstRow(); i <= range.getLastRow() && toRemove; i++) { + toRemove = rowsToRemoveSet.contains(i); + } + if (toRemove) { + hyperlinks.remove(link); + } } } } @@ -4264,13 +4273,13 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet, OoxmlSheetEx @Override public CellRangeAddress getRepeatingRows() { - return getRepeatingRowsOrColums(true); + return getRepeatingRowsOrColumns(true); } @Override public CellRangeAddress getRepeatingColumns() { - return getRepeatingRowsOrColums(false); + return getRepeatingRowsOrColumns(false); } @Override @@ -4387,7 +4396,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet, OoxmlSheetEx } - private CellRangeAddress getRepeatingRowsOrColums(boolean rows) { + private CellRangeAddress getRepeatingRowsOrColumns(boolean rows) { int sheetIndex = getWorkbook().getSheetIndex(this); XSSFName name = getWorkbook().getBuiltInName( XSSFName.BUILTIN_PRINT_TITLE, sheetIndex);