/** * Shift the Hyperlink anchors (not the hyperlink text, even if the hyperlink * is of type LINK_DOCUMENT and refers to a cell that was shifted). Hyperlinks * do not track the content they point to. * * @param shifter */ public override void UpdateHyperlinks(FormulaShifter shifter) { XSSFSheet xsheet = (XSSFSheet)sheet; int sheetIndex = xsheet.GetWorkbook().GetSheetIndex(sheet); List <IHyperlink> hyperlinkList = sheet.GetHyperlinkList(); foreach (IHyperlink hyperlink1 in hyperlinkList) { XSSFHyperlink hyperlink = hyperlink1 as XSSFHyperlink; String cellRef = hyperlink.CellRef; CellRangeAddress cra = CellRangeAddress.ValueOf(cellRef); CellRangeAddress shiftedRange = ShiftRange(shifter, cra, sheetIndex); if (shiftedRange != null && shiftedRange != cra) { // shiftedRange should not be null. If shiftedRange is null, that means // that a hyperlink wasn't deleted at the beginning of shiftRows when // identifying rows that should be removed because they will be overwritten hyperlink.SetCellReference(shiftedRange.FormatAsString()); } } }