Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
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));
        }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
 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));
 }
Exemplo n.º 8
0
 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));
 }
Exemplo n.º 9
0
 protected override CalcExpression VisitCellExpression(CalcCellExpression expr, int baseRow, int baseColumn)
 {
     return(expr.Offset(this._rowOffset, this._colOffset, false, true));
 }
Exemplo n.º 10
0
        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));
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
 protected virtual CalcExpression VisitCellExpression(CalcCellExpression expr, int baseRow, int baseColumn)
 {
     return(expr);
 }