text: public bool UpdateFormulasAfterCellShift(FormulaShifter shifter, int currentExternSheetIx){CellRangeAddress[] cellRanges = header.CellRanges;bool changed = false;List<CellRangeAddress> temp = new List<CellRangeAddress>();for (int i = 0; i < cellRanges.Length; i++){CellRangeAddress craOld = cellRanges[i];CellRangeAddress craNew = ShiftRange(shifter, craOld, currentExternSheetIx);if (craNew == null){changed = true;continue;}temp.Add(craNew);if (craNew != craOld){changed = true;}}if (changed){int nRanges = temp.Count;if (nRanges == 0){return false;}CellRangeAddress[] newRanges = new CellRangeAddress[nRanges];newRanges = temp.ToArray();header.CellRanges = (newRanges);}for (int i = 0; i < rules.Count; i++){CFRuleRecord rule = rules[i];Ptg[] ptgs;ptgs = rule.ParsedExpression1;if (ptgs != null && shifter.AdjustFormula(ptgs, currentExternSheetIx)){rule.ParsedExpression1 = (ptgs);}ptgs = rule.ParsedExpression2;if (ptgs != null && shifter.AdjustFormula(ptgs, currentExternSheetIx)){rule.ParsedExpression2 = (ptgs);}}return true;}