public void OffsetFormulasWhileCopy(Worksheet src, int fromRow, int fromColumn, int toRow, int toColumn, int rowCount, int columnCount, Dictionary <Tuple <int, int>, DataValidator> copiedValidators) { DataValidationConditionalGraph graph = null; rowCount = (rowCount <= 0) ? 0 : rowCount; columnCount = (columnCount <= 0) ? 0 : columnCount; int num = toRow - fromRow; foreach (KeyValuePair <Tuple <int, int>, DataValidator> pair in copiedValidators) { int rowOffset = num + (((pair.Key.Item1 - toRow) / rowCount) * rowCount); int columnOffset = num + (((pair.Key.Item2 - toColumn) / columnCount) * columnCount); MoveVisitor visitor = new MoveVisitor(new CellRange(fromRow, fromColumn, rowCount, columnCount), rowOffset, columnOffset, graph._sheetRowCount, graph._sheetColumnCount, false, null, false, null, true); IConditionalFormula[] formulaConditions = pair.Value.FormulaConditions; if ((formulaConditions != null) && (formulaConditions.Length != 0)) { foreach (IConditionalFormula formula in formulaConditions) { CalcExpression expr = graph.Formula2Expression(formula.Formula, toRow, toColumn); expr = visitor.Visit(expr, toRow, toColumn); formula.Formula = graph.Expression2Formula(expr, toRow, toColumn); } } } }
public void Move(Worksheet src, int fromRow, int fromColumn, int toRow, int toColumn, int rowCount, int columnCount) { DataValidationConditionalGraph graph = null; Dictionary <CalcLocalIdentity, List <ConditionalGraph.ConditionalIdentity> > dictionary = this.GetAllFromulas(fromRow, fromColumn, rowCount, columnCount); this.Clear(fromRow, fromColumn, rowCount, columnCount); graph.Clear(toRow, toColumn, rowCount, columnCount); MoveVisitor visitor = new MoveVisitor(new CellRange(fromRow, fromColumn, rowCount, columnCount), toRow - fromRow, toColumn - fromColumn, graph._sheetRowCount, graph._sheetColumnCount, false, null, false, null, false); using (Dictionary <CalcLocalIdentity, List <ConditionalGraph.ConditionalIdentity> > .ValueCollection.Enumerator enumerator = dictionary.Values.GetEnumerator()) { while (enumerator.MoveNext()) { foreach (ConditionalGraph.ConditionalIdentity identity in enumerator.Current) { CalcExpression expr = visitor.Visit(identity.Expression, toRow, toColumn); ((IFormulaOperatorSource)graph).SetExpression(identity, expr); } } } }