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); } }
private static string RangeToFormula(CellRange range, Worksheet activeSheet) { string sheetName = activeSheet.Name + "!"; if (range.RowCount == 1 && range.ColumnCount == 1) { CalcCellExpression exp = new CalcCellExpression(range.Row, range.Column, true, true); return sheetName + ((ICalcEvaluator)activeSheet).Expression2Formula(exp, 0, 0); } else { CalcRangeExpression exp = CreateRangeExpressionByCount( range.Row, range.Column, range.RowCount, range.ColumnCount, true, true, true, true); return sheetName + ((ICalcEvaluator)activeSheet).Expression2Formula(exp, 0, 0); } }
protected override CalcExpression VisitCellExpression(CalcCellExpression expr, int baseRow, int baseColumn) { bool flag = this._maxRowIndex.HasValue && expr.RowRelative; bool flag2 = this._maxColIndex.HasValue && expr.ColumnRelative; if (!flag && !flag2) { return(expr); } CalcCellIdentity identity = this.GetId(expr, baseRow, baseColumn) as CalcCellIdentity; if ((!flag || ((identity.RowIndex >= 0) && (identity.RowIndex <= this._maxRowIndex.Value))) && (!flag2 || ((identity.ColumnIndex >= 0) && (identity.ColumnIndex <= this._maxColIndex.Value)))) { return(expr); } return(new CalcErrorExpression(CalcErrors.Reference)); }
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 VisitCellExpression(CalcCellExpression expr, int baseRow, int baseColumn) { int num2; int num4; if (base.OffsetExternalOnly) { return(expr); } if (this._isFullBand && ((this._isRow && expr.RowRelative) || (!this._isRow && expr.ColumnRelative))) { return(expr); } CalcCellIdentity id = expr.GetId(baseRow, baseColumn) as CalcCellIdentity; int oldIndex = this._isRow ? id.RowIndex : id.ColumnIndex; this.GetCellOffset(oldIndex, out num2); int num3 = this._isRow ? baseRow : baseColumn; this.GetCellOffset(num3, out num4); if (num2 == -2147483648) { return(new CalcErrorExpression(CalcErrors.Reference)); } int row = num2 - oldIndex; if ((this._isRow && expr.RowRelative) || (!this._isRow && expr.ColumnRelative)) { row -= num4 - num3; } if (row == 0) { return(base.VisitCellExpression(expr, baseRow, baseColumn)); } if (this._isRow) { return(expr.Offset(row, 0, true, !this.OffsetAbsoluteOnly)); } return(expr.Offset(0, row, true, !this.OffsetAbsoluteOnly)); }
protected override CalcExpression VisitCellExpression(CalcCellExpression expr, int baseRow, int baseColumn) { CalcCellIdentity id = expr.GetId(baseRow, baseColumn) as CalcCellIdentity; 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 CalcCellExpression; } } 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 CalcCellExpression; } } if (this._convertToExternal) { return(new CalcExternalCellExpression(this._extSource, expr.Row, expr.Column, expr.RowRelative, expr.ColumnRelative)); } } return(expr); }
protected override CalcExpression VisitCellExpression(CalcCellExpression expr, int baseRow, int baseColumn) { this.AddPredenceIds(expr.GetId(this._baseRow, this._BaseColumn) as CalcLocalIdentity, expr.RowRelative && expr.ColumnRelative); return(base.VisitCellExpression(expr, baseRow, baseColumn)); }
public CalcIdentity GetId(CalcCellExpression cellExp, int row, int column) { return(new CalcCellIdentity(cellExp.RowRelative ? (cellExp.Row + row) : cellExp.Row, cellExp.ColumnRelative ? (cellExp.Column + column) : cellExp.Column)); }
protected override CalcExpression VisitCellExpression(CalcCellExpression expr, int baseRow, int baseColumn) { return(expr.Offset(this._rowOffset, this._colOffset, false, true)); }
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 VisitCellExpression(CalcCellExpression expr, int baseRow, int baseColumn) { return(expr); }