コード例 #1
0
        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));
        }
コード例 #2
0
ファイル: RemoveSheetVisitor.cs プロジェクト: Daoting/dt
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
ファイル: MoveVisitor.cs プロジェクト: Daoting/dt
        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);
        }
コード例 #5
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);
        }
コード例 #6
0
 protected virtual CalcExpression VisitSheetRangeExpression(CalcSheetRangeExpression expr, int baseRow, int baseColumn)
 {
     return(expr);
 }