public CalcIdentity GetId(CalcSheetRangeExpression expr, int row, int column) { if (expr.IsFullRow && expr.IsFullColumn) { return(new CalcSheetRangeIdentity(expr.StartSource, expr.EndSource)); } if (expr.IsFullRow) { int num = expr.StartRowRelative ? (expr.StartRow + row) : expr.StartRow; int num2 = expr.EndRowRelative ? (expr.EndRow + row) : expr.EndRow; this.Sort(ref num, ref num2); return(new CalcSheetRangeIdentity(expr.StartSource, expr.EndSource, num, (num2 - num) + 1, true)); } if (expr.IsFullColumn) { int num3 = expr.StartColumnRelative ? (expr.StartColumn + column) : expr.StartColumn; int num4 = expr.EndColumnRelative ? (expr.EndColumn + column) : expr.EndColumn; this.Sort(ref num3, ref num4); return(new CalcSheetRangeIdentity(expr.StartSource, expr.EndSource, num3, (num4 - num3) + 1, false)); } int num5 = expr.StartRowRelative ? (expr.StartRow + row) : expr.StartRow; int num6 = expr.EndRowRelative ? (expr.EndRow + row) : expr.EndRow; int num7 = expr.StartColumnRelative ? (expr.StartColumn + column) : expr.StartColumn; int num8 = expr.EndColumnRelative ? (expr.EndColumn + column) : expr.EndColumn; this.Sort(ref num5, ref num6); this.Sort(ref num7, ref num8); return(new CalcSheetRangeIdentity(expr.StartSource, expr.EndSource, num5, num7, (num6 - num5) + 1, (num8 - num7) + 1)); }
protected override CalcExpression VisitSheetRangeExpression(CalcSheetRangeExpression sheetRangeExpr, int baseRow, int baseColumn) { if ((sheetRangeExpr.StartSource == sheetRangeExpr.EndSource) && (sheetRangeExpr.StartSource == this._currentSource)) { return(new CalcErrorExpression(CalcErrors.Reference)); } ICalcSource newStartSource = (sheetRangeExpr.StartSource == this._currentSource) ? this._replacedSource : sheetRangeExpr.StartSource; ICalcSource newEndSource = (sheetRangeExpr.EndSource == this._currentSource) ? this._replacedSource : sheetRangeExpr.EndSource; return(sheetRangeExpr.ResetSheetRanges(newStartSource, newEndSource)); }
protected override CalcExpression VisitSheetRangeExpression(CalcSheetRangeExpression expr, int baseRow, int baseColumn) { bool flag = (this._maxRowIndex.HasValue && !expr.IsFullColumn) && expr.StartRowRelative; bool flag2 = (this._maxColIndex.HasValue && !expr.IsFullRow) && expr.StartColumnRelative; bool flag3 = (this._maxRowIndex.HasValue && !expr.IsFullColumn) && expr.EndRowRelative; bool flag4 = (this._maxColIndex.HasValue && !expr.IsFullRow) && expr.EndColumnRelative; if ((!flag && !flag2) && (!flag3 && !flag4)) { return(expr); } int num = 0x7fffffff; int num2 = 0x7fffffff; IMultiSourceProvider startSource = expr.StartSource as IMultiSourceProvider; if (startSource != null) { foreach (ICalcSource source in startSource.GetCalcSources(expr.StartSource, expr.EndSource)) { num = (num >= source.GetRowCount()) ? (source.GetRowCount() - 1) : num; num2 = (num2 >= source.GetColumnCount()) ? (source.GetColumnCount() - 1) : num2; } } else { num = expr.StartSource.GetRowCount() - 1; num2 = expr.EndSource.GetRowCount() - 1; num = (num >= expr.EndSource.GetRowCount()) ? (expr.EndSource.GetRowCount() - 1) : num; num2 = (num2 >= expr.EndSource.GetColumnCount()) ? (expr.EndSource.GetColumnCount() - 1) : num2; } CalcSheetRangeIdentity identity = this.GetId(expr, baseRow, baseColumn) as CalcSheetRangeIdentity; int num3 = (identity.RowIndex + identity.RowCount) - 1; int num4 = (identity.ColumnIndex + identity.ColumnCount) - 1; if (((!flag || ((identity.RowIndex >= 0) && (identity.RowIndex <= num))) && (!flag2 || ((identity.ColumnIndex >= 0) && (identity.ColumnIndex <= num2)))) && ((!flag3 || ((num3 >= 0) && (num3 <= num))) && (!flag4 || ((num4 >= 0) && (num4 <= num2))))) { return(base.VisitSheetRangeExpression(expr, baseRow, baseColumn)); } return(new CalcErrorExpression(CalcErrors.Reference)); }
protected override CalcExpression VisitSheetRangeExpression(CalcSheetRangeExpression expr, int baseRow, int baseColumn) { CalcSheetRangeIdentity id = expr.GetId(baseRow, baseColumn) as CalcSheetRangeIdentity; if (!this._isCopy || !this._offsetForDependency) { if (this._offsetForDependency) { if ((!id.IsFullColumn && (((id.RowIndex + this._rowOffset) < 0) || ((((id.RowIndex + id.RowCount) - 1) + this._rowOffset) >= this._rowCount))) || (!id.IsFullRow && (((id.ColumnIndex + this._columnOffset) < 0) || ((((id.ColumnIndex + id.ColumnCount) - 1) + this._columnOffset) >= this._columnCount)))) { return(new CalcErrorExpression(CalcErrors.Reference)); } if (this.NeedMove(id.RowIndex, id.ColumnIndex, id.RowCount, id.ColumnCount)) { expr = expr.Offset(this._rowOffset, this._columnOffset, this._offsetForDependency, true) as CalcSheetRangeExpression; } return(expr); } if (!this._isCopy) { if (!expr.StartRowRelative && !expr.EndRowRelative) { this._rowOffset = 0; } if (!expr.StartColumnRelative && !expr.EndColumnRelative) { this._columnOffset = 0; } if (this.NeedMove(baseRow, baseColumn, baseRow + id.RowCount, baseColumn + id.ColumnCount)) { expr = expr.Offset(-this._rowOffset, -this._columnOffset, false, true) as CalcSheetRangeExpression; } } } return(expr); }
public virtual CalcExpression Visit(CalcExpression expr, int baseRow, int baseColumn) { CalcConstantExpression expression = expr as CalcConstantExpression; if (expression != null) { return(this.VisitConstantExpression(expression)); } CalcCellExpression expression2 = expr as CalcCellExpression; if (expression2 != null) { return(this.VisitCellExpression(expression2, baseRow, baseColumn)); } CalcRangeExpression expression3 = expr as CalcRangeExpression; if (expression3 != null) { return(this.VisitRangeExpression(expression3, baseRow, baseColumn)); } CalcUnaryOperatorExpression expression4 = expr as CalcUnaryOperatorExpression; if (expression4 != null) { return(this.VisitUnaryOperatorExpression(expression4, baseRow, baseColumn)); } CalcBinaryOperatorExpression expression5 = expr as CalcBinaryOperatorExpression; if (expression5 != null) { return(this.VisitBinaryOperatorExpression(expression5, baseRow, baseColumn)); } CalcFunctionExpression expression6 = expr as CalcFunctionExpression; if (expression6 != null) { return(this.VisitFunctionExpression(expression6, baseRow, baseColumn)); } CalcExternalCellExpression expression7 = expr as CalcExternalCellExpression; if (expression7 != null) { return(this.VisitExternalCellExpression(expression7, baseRow, baseColumn)); } CalcExternalRangeExpression expression8 = expr as CalcExternalRangeExpression; if (expression8 != null) { return(this.VisitExternalRangeExpression(expression8, baseRow, baseColumn)); } if (expr is CalcSharedExpression) { CalcExpression expression9 = (expr as CalcSharedExpression).Expression; CalcExpression expression10 = this.Visit(expression9, baseRow, baseColumn); if (expression10 == expression9) { return(expr); } return(new CalcSharedExpression(expression10)); } CalcParenthesesExpression expression11 = expr as CalcParenthesesExpression; if (expression11 != null) { return(this.VisitParenthesesExpression(expression11, baseRow, baseColumn)); } CalcNameExpression expression12 = expr as CalcNameExpression; if (expression12 != null) { return(this.VisitNameExpression(expression12, baseRow, baseColumn)); } CalcExternalNameExpression expression13 = expr as CalcExternalNameExpression; if (expression13 != null) { return(this.VisitExternalNameExpression(expression13, baseRow, baseColumn)); } CalcSheetRangeExpression expression14 = expr as CalcSheetRangeExpression; if (expression14 != null) { return(this.VisitSheetRangeExpression(expression14, baseRow, baseColumn)); } return(expr); }
protected virtual CalcExpression VisitSheetRangeExpression(CalcSheetRangeExpression expr, int baseRow, int baseColumn) { return(expr); }