public static SheetCellRange ExtractRange(ICalcEvaluator sheet, CalcExpression value) { if ((value != null) && !(value is CalcConstantExpression)) { if ((value is CalcExternalCellExpression) || (value is CalcExternalRangeExpression)) { CalcExternalCellExpression expression = value as CalcExternalCellExpression; if (expression != null) { return(new SheetCellRange(expression.Source as Worksheet, expression.Row, expression.Column, 1, 1)); } CalcExternalRangeExpression expression2 = value as CalcExternalRangeExpression; if (expression2 != null) { return(new SheetCellRange(expression2.Source as Worksheet, expression2.StartRow, expression2.StartColumn, (expression2.EndRow - expression2.StartRow) + 1, (expression2.EndColumn - expression2.StartColumn) + 1)); } } else if (value is CalcExternalNameExpression) { SheetCellRange[] rangeArray = SheetCellRangeUtility.ExtractAllExternalReference(sheet, value); if ((rangeArray != null) && (rangeArray.Length > 0)) { return(rangeArray[0]); } } } return(null); }
void UpdateDataRange() { this._cachRange = new CellRange(0, 0, 0, 0); CalcExternalRangeExpression dataReference = this.DataReference as CalcExternalRangeExpression; if (dataReference != null) { this._cachRange = new CellRange(dataReference.StartRow, dataReference.StartColumn, (dataReference.EndRow - dataReference.StartRow) + 1, (dataReference.EndColumn - dataReference.StartColumn) + 1); } CalcRangeExpression expression2 = this.DataReference as CalcRangeExpression; if (expression2 != null) { this._cachRange = new CellRange(expression2.StartRow, expression2.StartColumn, (expression2.EndRow - expression2.StartRow) + 1, (expression2.EndColumn - expression2.StartColumn) + 1); } CalcExternalCellExpression expression3 = this.DataReference as CalcExternalCellExpression; if (expression3 != null) { this._cachRange = new CellRange(expression3.Row, expression3.Column, 1, 1); } CalcCellExpression expression4 = this.DataReference as CalcCellExpression; if (expression4 != null) { this._cachRange = new CellRange(expression4.Row, expression4.Column, 1, 1); } }
public static SheetCellRange[] ExtractAllExternalReference(ICalcEvaluator evaluator, CalcExpression expression) { if (expression != null) { List <CalcReferenceExpression> nodes = new List <CalcReferenceExpression>(); FormulaUtility.ExtractAllReferenceExpression(evaluator, expression, nodes); if (nodes.Count > 0) { List <SheetCellRange> list2 = new List <SheetCellRange>(); foreach (CalcReferenceExpression expression2 in nodes) { if (expression2 is CalcExternalRangeExpression) { CalcExternalRangeExpression expression3 = expression2 as CalcExternalRangeExpression; SheetCellRange range = new SheetCellRange(expression3.Source as Worksheet, expression3.StartRow, expression3.StartColumn, (expression3.EndRow - expression3.StartRow) + 1, (expression3.EndColumn - expression3.StartColumn) + 1); list2.Add(range); } else if (expression2 is CalcExternalCellExpression) { CalcExternalCellExpression expression4 = expression2 as CalcExternalCellExpression; SheetCellRange range2 = new SheetCellRange(expression4.Source as Worksheet, expression4.Row, expression4.Column, 1, 1); list2.Add(range2); } else { return(null); } } return(list2.ToArray()); } } return(null); }
protected override CalcExpression VisitExternalCellExpression(CalcExternalCellExpression expr, int baseRow, int baseColumn) { if (expr.Source == this._source) { this.AddPredenceIds((expr.GetId(this._baseRow, this._BaseColumn) as CalcExternalIdentity).ConvertToLocal(), expr.RowRelative && expr.ColumnRelative); } return(base.VisitExternalCellExpression(expr, baseRow, baseColumn)); }
protected override CalcExpression VisitExternalCellExpression(CalcExternalCellExpression expr, int baseRow, int baseColumn) { int num2; int num4; int oldIndex = this._isRow ? baseRow : baseColumn; this.GetCellOffset(oldIndex, out num2); if ((base.CurrentCalcSource == null) || (base.CurrentCalcSource != expr.Source)) { if (oldIndex == num2) { return(expr); } if (this._isRow) { return(expr.Offset(oldIndex - num2, 0, false, true)); } return(expr.Offset(0, oldIndex - num2, false, true)); } if (this._isFullBand && ((this._isRow && expr.RowRelative) || (!this._isRow && expr.ColumnRelative))) { return(expr); } CalcExternalCellIdentity id = expr.GetId(baseRow, baseColumn) as CalcExternalCellIdentity; int num3 = this._isRow ? id.RowIndex : id.ColumnIndex; this.GetCellOffset(num3, out num4); if (num4 == -2147483648) { return(new CalcErrorExpression(CalcErrors.Reference)); } int row = num4 - num3; if ((this._isRow && expr.RowRelative) || (!this._isRow && expr.ColumnRelative)) { row -= num2 - oldIndex; } if (row == 0) { return(base.VisitExternalCellExpression(expr, baseRow, baseColumn)); } if (this._isRow) { return(expr.Offset(row, 0, true, !this.OffsetAbsoluteOnly)); } return(expr.Offset(0, row, true, !this.OffsetAbsoluteOnly)); }
static CalcExpression ConvertToExternal(ICalcSource extSource, CalcExpression exp) { if (exp is CalcRangeExpression) { CalcRangeExpression expression = (CalcRangeExpression)exp; if (expression.IsFullRow && expression.IsFullColumn) { return(new CalcExternalRangeExpression(extSource)); } if (expression.IsFullRow) { return(new CalcExternalRangeExpression(extSource, expression.StartRow, expression.EndRow, expression.StartRowRelative, expression.EndRowRelative, true)); } if (expression.IsFullColumn) { return(new CalcExternalRangeExpression(extSource, expression.StartColumn, expression.EndColumn, expression.StartColumnRelative, expression.EndColumnRelative, false)); } return(new CalcExternalRangeExpression(extSource, expression.StartRow, expression.StartColumn, expression.EndRow, expression.EndColumn, expression.StartRowRelative, expression.StartColumnRelative, expression.EndRowRelative, expression.EndColumnRelative)); } if (exp is CalcCellExpression) { CalcCellExpression expression2 = (CalcCellExpression)exp; return(new CalcExternalCellExpression(extSource, expression2.Row, expression2.Column, expression2.RowRelative, expression2.ColumnRelative)); } if (exp is CalcExternalRangeExpression) { CalcExternalRangeExpression expression3 = (CalcExternalRangeExpression)exp; if (expression3.Source != extSource) { return(new CalcExternalRangeExpression(extSource, expression3.StartRow, expression3.StartColumn, expression3.EndRow, expression3.EndColumn, expression3.StartRowRelative, expression3.StartColumnRelative, expression3.EndRowRelative, expression3.EndColumnRelative)); } return(exp); } if (exp is CalcExternalCellExpression) { CalcExternalCellExpression expression4 = (CalcExternalCellExpression)exp; if (expression4.Source != extSource) { return(new CalcExternalCellExpression(extSource, expression4.Row, expression4.Column, expression4.RowRelative, expression4.ColumnRelative)); } } return(exp); }
protected override CalcExpression VisitExternalCellExpression(CalcExternalCellExpression expr, int baseRow, int baseColumn) { bool rowRelative = expr.RowRelative; bool columnRelative = expr.ColumnRelative; if (!rowRelative && !columnRelative) { return(expr); } int num = expr.Source.GetRowCount() - 1; int num2 = expr.Source.GetColumnCount() - 1; CalcExternalCellIdentity identity = this.GetId(expr, baseRow, baseColumn) as CalcExternalCellIdentity; if ((!rowRelative || ((identity.RowIndex >= 0) && (identity.RowIndex <= num))) && (!columnRelative || ((identity.ColumnIndex >= 0) && (identity.ColumnIndex <= num2)))) { return(expr); } return(new CalcErrorExpression(CalcErrors.Reference)); }
protected override CalcExpression VisitExternalCellExpression(CalcExternalCellExpression expr, int baseRow, int baseColumn) { CalcExternalCellIdentity id = expr.GetId(baseRow, baseColumn) as CalcExternalCellIdentity; if (!this._isCopy || !this._offsetForDependency) { if (this._offsetForDependency) { if ((((id.RowIndex + this._rowOffset) < 0) || ((id.ColumnIndex + this._columnOffset) < 0)) || (((id.RowIndex + this._rowOffset) >= this._rowCount) || ((id.ColumnIndex + this._columnOffset) >= this._columnCount))) { return(new CalcErrorExpression(CalcErrors.Reference)); } if (this.NeedMove(id.RowIndex, id.ColumnIndex, -1, -1)) { expr = expr.Offset(this._rowOffset, this._columnOffset, this._offsetForDependency, true) as CalcExternalCellExpression; } } else if (!this._isCopy) { if (!expr.RowRelative) { this._rowOffset = 0; } if (!expr.ColumnRelative) { this._columnOffset = 0; } if (this.NeedMove(baseRow, baseColumn, -1, -1)) { expr = expr.Offset(-this._rowOffset, -this._columnOffset, false, true) as CalcExternalCellExpression; } } if (this._convertToExternal && (expr.Source != this._extSource)) { return(new CalcExternalCellExpression(this._extSource, expr.Row, expr.Column, expr.RowRelative, expr.ColumnRelative)); } } return(expr); }
public CalcIdentity GetId(CalcExternalCellExpression cellExp, int row, int column) { return(new CalcExternalCellIdentity(cellExp.Source, cellExp.RowRelative ? (cellExp.Row + row) : cellExp.Row, cellExp.ColumnRelative ? (cellExp.Column + column) : cellExp.Column)); }
public static CellRange GetRangeFromExpression(CalcReferenceExpression reference) { int row = 0; int column = 0; int rowCount = 0; int columnCount = 0; if (reference is CalcCellExpression) { CalcCellExpression expression = reference as CalcCellExpression; row = expression.Row; column = expression.Column; rowCount = 1; columnCount = 1; } else if (reference is CalcRangeExpression) { CalcRangeExpression expression2 = reference as CalcRangeExpression; if (expression2.IsFullColumn) { row = -1; column = expression2.StartColumn; rowCount = -1; columnCount = (expression2.EndColumn - expression2.StartColumn) + 1; } else if (expression2.IsFullRow) { row = expression2.StartRow; column = -1; rowCount = (expression2.EndRow - expression2.StartRow) + 1; columnCount = -1; } else { row = expression2.StartRow; column = expression2.StartColumn; rowCount = (expression2.EndRow - expression2.StartRow) + 1; columnCount = (expression2.EndColumn - expression2.StartColumn) + 1; } } else if (reference is CalcExternalCellExpression) { CalcExternalCellExpression expression3 = reference as CalcExternalCellExpression; row = expression3.Row; column = expression3.Column; rowCount = 1; columnCount = 1; } else if (reference is CalcExternalRangeExpression) { CalcExternalRangeExpression expression4 = reference as CalcExternalRangeExpression; if (expression4.IsFullColumn) { row = -1; column = expression4.StartColumn; rowCount = -1; columnCount = (expression4.EndColumn - expression4.StartColumn) + 1; } else if (expression4.IsFullRow) { row = expression4.StartRow; column = -1; rowCount = (expression4.EndRow - expression4.StartRow) + 1; columnCount = -1; } else { row = expression4.StartRow; column = expression4.StartColumn; rowCount = (expression4.EndRow - expression4.StartRow) + 1; columnCount = (expression4.EndColumn - expression4.StartColumn) + 1; } } return(new CellRange(row, column, rowCount, columnCount)); }
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 VisitExternalCellExpression(CalcExternalCellExpression expr, int baseRow, int baseColumn) { return(expr); }