]> source.dussan.org Git - poi.git/commitdiff
[bug-65973] partial fix for removing hyperlinks that span multiple cells
authorPJ Fanning <fanningpj@apache.org>
Tue, 22 Mar 2022 12:02:11 +0000 (12:02 +0000)
committerPJ Fanning <fanningpj@apache.org>
Tue, 22 Mar 2022 12:02:11 +0000 (12:02 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1899130 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java

index 27bd123c23a3fb818d6a37d028b854f0129940ea..50e66f2f99b3353233baa6bce128580fb40ba5cc 100644 (file)
@@ -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);