示例#1
0
 static bool ContainsOrEqual(CalcCalculationManager mgr, CalcLocalIdentity id1, CalcLocalIdentity id2)
 {
     CalcLocalIdentityExtension.CompareResult result;
     CalcLocalIdentityExtension.CompareResult result2;
     if (id2.TryCompareTo(id1, out result, out result2))
     {
         CalcNode       objA       = mgr.Graph.GetNode(id2);
         CalcExpression expression = mgr.GetExpression(id2);
         if (expression == null)
         {
             return(false);
         }
         if ((!object.ReferenceEquals(objA, null) && (objA.OwnerNode != null)) && (expression is CalcSharedExpression))
         {
             return(false);
         }
         if (((id2 is CalcRangeIdentity) && (((result == CalcLocalIdentityExtension.CompareResult.Great_Intersected) || (result == CalcLocalIdentityExtension.CompareResult.Less_Intersected)) || (result == CalcLocalIdentityExtension.CompareResult.Contains))) && (((result2 == CalcLocalIdentityExtension.CompareResult.Great_Intersected) || (result2 == CalcLocalIdentityExtension.CompareResult.Less_Intersected)) || (result2 == CalcLocalIdentityExtension.CompareResult.Contains)))
         {
             if (!(mgr.GetExpression(id2) is CalcSharedExpression))
             {
                 throw new InvalidOperationException(ResourceStrings.FormulaChangePartOfArrayFormulaError);
             }
             return(false);
         }
         if (((result == CalcLocalIdentityExtension.CompareResult.Contained) || (result == CalcLocalIdentityExtension.CompareResult.Equal)) && ((result2 == CalcLocalIdentityExtension.CompareResult.Contained) || (result2 == CalcLocalIdentityExtension.CompareResult.Equal)))
         {
             return(true);
         }
     }
     return(false);
 }
示例#2
0
        public void Copy(SpreadCalcAxialManager src, int fromRow, int fromColumn, int toRow, int toColumn, int fromRowCount, int fromColumnCount, int toRowCount, int toColumnCount)
        {
            CalcCalculationManager sourceMgr = (src == null) ? this.Manager : src.Manager;
            Dictionary <CalcLocalIdentity, CalcExpression> formulas = this.GetFormulaIds(fromRow, fromColumn, fromRowCount, fromColumnCount, sourceMgr, null, false);

            this.Save(src, fromRow, fromColumn, toRow, toColumn, fromRowCount, fromColumnCount, toRowCount, toColumnCount, formulas, false, false);
        }
示例#3
0
        public void Save(SpreadCalcAxialManager src, int fromRow, int fromColumn, int toRow, int toColumn, int fromRowCount, int fromColumnCount, int toRowCount, int toColumnCount, Dictionary <CalcLocalIdentity, CalcExpression> formulas, bool offsetSelf, bool updataDependens)
        {
            CalcCalculationManager sourceMgr = (src == null) ? this.Manager : src.Manager;
            int sourceRowCount    = (src == null) ? this.RowCount : src.RowCount;
            int sourceColumnCount = (src == null) ? this.ColumnCount : src.ColumnCount;

            FormulaClipboardHelper.Save(sourceMgr, this.Manager, null, sourceRowCount, sourceColumnCount, fromRow, fromColumn, toRow, toColumn, fromRowCount, fromColumnCount, toRowCount, toColumnCount, formulas, offsetSelf, updataDependens);
        }
示例#4
0
        public void RemoveSheet(IList sources, ICalcSource replacedSource)
        {
            ICalcSource currentSource = this.Manager.Source;
            Dictionary <CalcCalculationManager, Dictionary <CalcLocalIdentity, CalcExpression> > dictionary = new Dictionary <CalcCalculationManager, Dictionary <CalcLocalIdentity, CalcExpression> >();

            foreach (object obj2 in sources)
            {
                ICalcSource source = obj2 as ICalcSource;
                if (source != null)
                {
                    CalcCalculationManager manager = this.Manager.Service.GetCalculationManager(source, null, true);
                    if (manager != null)
                    {
                        foreach (CalcLocalIdentity identity in manager.Graph.GetAllSheetRangeIdentities())
                        {
                            CalcNode node = manager.Graph.GetNode(identity);
                            if (node.Precedents != null)
                            {
                                using (List <CalcNode> .Enumerator enumerator3 = node.Precedents.GetEnumerator())
                                {
                                    while (enumerator3.MoveNext())
                                    {
                                        if (enumerator3.Current.Source == currentSource)
                                        {
                                            Dictionary <CalcLocalIdentity, CalcExpression> dictionary2;
                                            if (!dictionary.TryGetValue(manager, out dictionary2))
                                            {
                                                dictionary2         = new Dictionary <CalcLocalIdentity, CalcExpression>();
                                                dictionary[manager] = dictionary2;
                                            }
                                            dictionary2[identity] = manager.GetExpression(identity);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            RemoveSheetVisitor visitor = new RemoveSheetVisitor(currentSource, replacedSource);

            foreach (KeyValuePair <CalcCalculationManager, Dictionary <CalcLocalIdentity, CalcExpression> > pair in dictionary)
            {
                CalcCalculationManager mgr = pair.Key;
                foreach (KeyValuePair <CalcLocalIdentity, CalcExpression> pair2 in pair.Value)
                {
                    int num;
                    int num2;
                    int num3;
                    int num4;
                    mgr.ClearExpression(pair2.Key);
                    FormulaOperatorHelper.Identity2Indexs(pair2.Key, out num, out num2, out num3, out num4);
                    CalcExpression expr = visitor.Visit(pair2.Value, num, num2);
                    CalcExpressionHelper.SetExpression(mgr, pair2.Key, expr, true);
                    mgr.Invalidate(pair2.Key, false);
                }
            }
        }
示例#5
0
        public static void Save(CalcCalculationManager sourceMgr, CalcCalculationManager targetMgr, ChangingContext context, int sourceRowCount, int sourceColumnCount, int fromRow, int fromColumn, int toRow, int toColumn, int fromRowCount, int fromColumnCount, int toRowCount, int toColumnCount, Dictionary <CalcLocalIdentity, CalcExpression> formulas, bool offsetSelf, bool updataDependens)
        {
            Dictionary <CalcLocalIdentity, CalcExpression> dictionary3;

            if (context == null)
            {
                context = new ChangingContext();
            }
            GetDependentsFromulas(sourceMgr, targetMgr, context, fromRow, fromColumn, toRow, toColumn, fromRowCount, formulas, fromColumnCount, offsetSelf, updataDependens);
            Dictionary <CalcCellIdentity, CalcExpression>  cellFormulas  = new Dictionary <CalcCellIdentity, CalcExpression>();
            Dictionary <CalcRangeIdentity, CalcExpression> rangeFormulas = new Dictionary <CalcRangeIdentity, CalcExpression>();

            foreach (KeyValuePair <CalcLocalIdentity, CalcExpression> pair in formulas)
            {
                if (pair.Key is CalcCellIdentity)
                {
                    cellFormulas[pair.Key as CalcCellIdentity] = pair.Value;
                }
                else if (pair.Key is CalcRangeIdentity)
                {
                    rangeFormulas[pair.Key as CalcRangeIdentity] = pair.Value;
                }
            }
            GetTargetFormulas(sourceMgr, targetMgr, sourceRowCount, sourceColumnCount, fromRow, fromColumn, toRow, toColumn, fromRowCount, fromColumnCount, toRowCount, toColumnCount, cellFormulas, rangeFormulas, offsetSelf, out dictionary3);
            ReferenceValidateVisitor visitor = new ReferenceValidateVisitor(new int?(sourceRowCount - 1), new int?(sourceColumnCount - 1));

            Clear(targetMgr, FormulaOperatorHelper.Indexs2Identity(toRow, toColumn, (toRow + toRowCount) - 1, (toColumn + toColumnCount) - 1));
            foreach (KeyValuePair <CalcLocalIdentity, CalcExpression> pair2 in dictionary3)
            {
                if (pair2.Value == null)
                {
                    targetMgr.ClearExpression(pair2.Key);
                }
                else
                {
                    int            num;
                    int            num2;
                    int            num3;
                    int            num4;
                    CalcExpression expr = pair2.Value;
                    FormulaOperatorHelper.Identity2Indexs(pair2.Key, out num, out num2, out num3, out num4);
                    num  = (num < 0) ? 0 : num;
                    num2 = (num2 < 0) ? 0 : num2;
                    num3 = (num3 < 0) ? 0 : num3;
                    num4 = (num4 < 0) ? 0 : num4;
                    expr = visitor.Visit(expr, num, num2);
                    if (expr is CalcSharedExpression)
                    {
                        expr = visitor.Visit(expr, num3, num4);
                    }
                    bool?isArrayFormula = null;
                    CalcExpressionHelper.SetExpression(targetMgr, pair2.Key, expr, isArrayFormula);
                }
                targetMgr.Invalidate(pair2.Key, false);
            }
        }
示例#6
0
        public void Move(SpreadCalcAxialManager src, int fromRow, int fromColumn, int toRow, int toColumn, int rowCount, int columnCount)
        {
            CalcCalculationManager sourceMgr = (src == null) ? this.Manager : src.Manager;
            ChangingContext        context   = new ChangingContext();
            Dictionary <CalcLocalIdentity, CalcExpression> formulas = this.GetFormulaIds(fromRow, fromColumn, rowCount, columnCount, sourceMgr, context, true);
            int sourceRowCount    = (src == null) ? this.RowCount : src.RowCount;
            int sourceColumnCount = (src == null) ? this.ColumnCount : src.ColumnCount;

            FormulaClipboardHelper.Save(sourceMgr, this.Manager, context, sourceRowCount, sourceColumnCount, fromRow, fromColumn, toRow, toColumn, rowCount, columnCount, rowCount, columnCount, formulas, true, true);
        }
示例#7
0
 public static void SetFormula(CalcCalculationManager mgr, CalcLocalIdentity id, string fromula, bool isArrayFormual)
 {
     if (id is CalcCellIdentity)
     {
         mgr.SetFormula(id as CalcCellIdentity, fromula, isArrayFormual);
     }
     if (id is CalcRangeIdentity)
     {
         mgr.SetFormula(id as CalcRangeIdentity, fromula, isArrayFormual);
     }
 }
示例#8
0
        static void GetDependentsFromulas(CalcCalculationManager sourceMgr, CalcCalculationManager targetMgr, ChangingContext context, int fromRow, int fromColumn, int toRow, int toColumn, int fromRowCount, Dictionary <CalcLocalIdentity, CalcExpression> formulas, int fromColumnCount, bool offsetSelf, bool updataDependens)
        {
            int rowOffset               = toRow - fromRow;
            int columnOffset            = toColumn - fromColumn;
            CalcLocalIdentity id        = FormulaOperatorHelper.Indexs2Identity(fromRow, fromColumn, (fromRow + fromRowCount) - 1, (fromColumn + fromColumnCount) - 1);
            CellRange         fromRange = new CellRange(fromRow, fromColumn, fromRowCount, fromColumnCount);
            MoveVisitor       visitor   = new MoveVisitor(fromRange, rowOffset, columnOffset, 0x7fffffff, 0x7fffffff, true, targetMgr.Source, sourceMgr != targetMgr, null, !offsetSelf);

            sourceMgr.Source.GetEvaluatorContext(new CalcCellIdentity(toRow, toColumn));
            new Dictionary <CalcIdentity, CalcIdentity>();
            CalcNode node = sourceMgr.Graph.GetNode(id);
            IFormulaOperatorSource   mgr  = new SpreadCalcAxialManager.FormulaOperatorSource(sourceMgr);
            List <CalcLocalIdentity> list = new List <CalcLocalIdentity>();
            HashSet <CalcNode>       arrayFormulaNodes = new HashSet <CalcNode>();

            if ((node != null) && updataDependens)
            {
                list = FormulaOperatorHelper.GetChangedDependents(mgr, context, node, arrayFormulaNodes, formulas, null);
            }
            if (offsetSelf && updataDependens)
            {
                foreach (CalcIdentity identity2 in sourceMgr.Graph.GetAllLocalIdentities())
                {
                    int num3;
                    int num4;
                    int num5;
                    int num6;
                    FormulaOperatorHelper.Identity2Indexs(identity2, out num3, out num4, out num5, out num6);
                    if ((((fromRow == -1) || (num3 >= fromRow)) && ((fromRow == -1) || (num5 < (fromRow + fromRowCount)))) && (((fromColumn == -1) || (num4 >= fromColumn)) && ((fromColumn == -1) || (num6 < (fromColumn + fromColumnCount)))))
                    {
                        CalcNode node2 = sourceMgr.Graph.GetNode(identity2);
                        if ((node2 != null) && (node2.Dependents != null))
                        {
                            list.AddRange((IEnumerable <CalcLocalIdentity>)FormulaOperatorHelper.GetChangedDependents(mgr, context, node2, arrayFormulaNodes, formulas, null));
                        }
                    }
                }
                visitor.CurrentCalcSource = sourceMgr.Source;
                foreach (CalcLocalIdentity identity3 in list)
                {
                    int            num7;
                    int            num8;
                    int            num9;
                    int            num10;
                    CalcExpression expr = formulas[identity3];
                    FormulaOperatorHelper.Identity2Indexs(identity3, out num7, out num8, out num9, out num10);
                    expr = visitor.Visit(expr, num7, num8);
                    formulas[identity3] = expr;
                }
            }
            FormulaOperatorHelper.UpdataInvalidFormula(mgr, context, visitor);
        }
示例#9
0
        public static void Clear(CalcCalculationManager mgr, CalcLocalIdentity id)
        {
            Dictionary <CalcCellIdentity, CalcExpression>  dictionary;
            Dictionary <CalcRangeIdentity, CalcExpression> dictionary2;

            FormulaOperatorHelper.GetAllContainsIds(mgr, id, out dictionary, out dictionary2);
            foreach (CalcCellIdentity identity in dictionary.Keys)
            {
                mgr.ClearExpression(identity);
                mgr.Invalidate(identity, false);
            }
            foreach (CalcRangeIdentity identity2 in dictionary2.Keys)
            {
                mgr.ClearExpression(identity2);
                mgr.Invalidate(identity2, false);
            }
        }
示例#10
0
        public static List <CalcRangeIdentity> GetAllContainsArrayFormulaIds(CalcCalculationManager manager, CalcLocalIdentity id)
        {
            int num;
            int num2;
            int num3;
            int num4;
            List <CalcRangeIdentity> list = new List <CalcRangeIdentity>();

            Identity2Indexs(id, out num, out num2, out num3, out num4);
            foreach (CalcRangeIdentity identity in manager.Graph.GetAllArrayFormulaIdentities())
            {
                if (ContainsOrEqual(manager, id, identity))
                {
                    list.Add(identity);
                }
            }
            return(list);
        }
示例#11
0
 public void InsertSheet(IList sources)
 {
     foreach (object obj2 in sources)
     {
         ICalcSource source = obj2 as ICalcSource;
         if (source != null)
         {
             CalcCalculationManager mgr = this.Manager.Service.GetCalculationManager(source, null, true);
             if (mgr != null)
             {
                 foreach (CalcLocalIdentity identity in mgr.Graph.GetAllSheetRangeIdentities())
                 {
                     CalcExpression expr = mgr.GetExpression(identity);
                     CalcExpressionHelper.SetExpression(mgr, identity, expr, true);
                 }
             }
         }
     }
 }
示例#12
0
 public static void SetExpression(CalcCalculationManager mgr, CalcLocalIdentity id, CalcExpression expr, bool?isArrayFormula = new bool?())
 {
     if (id is CalcCellIdentity)
     {
         mgr.SetExpression(id as CalcCellIdentity, expr, false);
     }
     if (id is CalcRangeIdentity)
     {
         if (!isArrayFormula.HasValue)
         {
             isArrayFormula = new bool?(!(expr is CalcSharedExpression));
         }
         else
         {
             CalcSharedExpression expression1 = expr as CalcSharedExpression;
         }
         mgr.SetExpression(id as CalcRangeIdentity, expr, isArrayFormula.Value);
     }
 }
示例#13
0
        public static void ValidateIntersectedArrayFormula(CalcCalculationManager mgr, int row, int column, int rowCount, int columnCount, bool isInsertRowOrColumn)
        {
            List <CalcRangeIdentity> list;
            List <CalcRangeIdentity> list2;
            CalcRangeIdentity        objA = FormulaOperatorHelper.Indexs2Identity(row, column, (row + rowCount) - 1, (column + columnCount) - 1) as CalcRangeIdentity;

            if (object.ReferenceEquals(objA, null))
            {
                objA = new CalcRangeIdentity(row, column, 1, 1);
            }
            mgr.GetArrayFormulaByRange(objA, out list, out list2);
            if ((list2 != null) && (list2.Count > 0))
            {
                foreach (CalcRangeIdentity identity2 in list2)
                {
                    if (!isInsertRowOrColumn || (((!identity2.IsFullRow && !objA.IsFullRow) || (identity2.RowIndex < row)) && ((!identity2.IsFullColumn && !objA.IsFullColumn) || (identity2.ColumnIndex < column))))
                    {
                        throw new InvalidOperationException(ResourceStrings.FormulaChangePartOfArrayFormulaError);
                    }
                }
            }
        }
示例#14
0
 public SpreadCalcAxialManager(Worksheet sheet, CalcCalculationManager manager, ICalcStorage <CalcLocalIdentity, CalcExpression> storage)
 {
     this.Sheet   = sheet;
     this.Manager = manager;
     this.Storage = storage;
 }
示例#15
0
        static void GetTargetFormulas(CalcCalculationManager sourceMgr, CalcCalculationManager targetMgr, int sourceRowCount, int sourceColumnCount, int fromRow, int fromColumn, int toRow, int toColumn, int fromRowCount, int fromColumnCount, int toRowCount, int toColumnCount, Dictionary <CalcCellIdentity, CalcExpression> cellFormulas, Dictionary <CalcRangeIdentity, CalcExpression> rangeFormulas, bool offsetSelf, out Dictionary <CalcLocalIdentity, CalcExpression> newExpressions)
        {
            MoveVisitor visitor;
            int         rowOffset    = toRow - fromRow;
            int         columnOffset = toColumn - fromColumn;
            CellRange   fromRange    = new CellRange(fromRow, fromColumn, fromRowCount, fromColumnCount);
            MoveVisitor visitor2     = new MoveVisitor(fromRange, rowOffset, columnOffset, sourceRowCount, sourceColumnCount, false, sourceMgr.Source, sourceMgr != targetMgr, null, !offsetSelf);

            newExpressions = new Dictionary <CalcLocalIdentity, CalcExpression>();
            if ((cellFormulas != null) && (cellFormulas.Count > 0))
            {
                for (int i = toRow; i < (toRow + toRowCount); i++)
                {
                    int rowIndex = ((i - toRow) % fromRowCount) + fromRow;
                    for (int j = toColumn; j < (toColumn + toColumnCount); j++)
                    {
                        int columnIndex           = ((j - toColumn) % fromColumnCount) + fromColumn;
                        CalcCellIdentity identity = new CalcCellIdentity(rowIndex, columnIndex);
                        CalcCellIdentity id       = new CalcCellIdentity(i, j);
                        if (cellFormulas.ContainsKey(identity))
                        {
                            CalcExpression expr = cellFormulas[identity];
                            if (!offsetSelf)
                            {
                                visitor = new MoveVisitor(fromRange, rowOffset, columnOffset, sourceRowCount, sourceColumnCount, false, sourceMgr.Source, false, null, true);
                                expr    = visitor.FirstVisit(expr, identity.RowIndex, identity.ColumnIndex);
                            }
                            else
                            {
                                expr = visitor2.Visit(expr, identity.RowIndex, identity.ColumnIndex);
                            }
                            newExpressions[id] = expr;
                        }
                        else if (targetMgr.GetExpression(id) != null)
                        {
                            newExpressions[id] = null;
                        }
                    }
                }
            }
            int num7 = (toRow + toRowCount) - 1;
            int num8 = (toColumn + toColumnCount) - 1;

            if ((rangeFormulas != null) && (rangeFormulas.Count > 0))
            {
                foreach (KeyValuePair <CalcRangeIdentity, CalcExpression> pair in rangeFormulas)
                {
                    int baseRow    = (pair.Key.RowIndex < 0) ? 0 : pair.Key.RowIndex;
                    int baseColumn = (pair.Key.ColumnIndex < 0) ? 0 : pair.Key.ColumnIndex;
                    if (!pair.Key.IsFullRow || !pair.Key.IsFullColumn)
                    {
                        if (pair.Key.IsFullColumn)
                        {
                            for (int k = toColumn; k <= num8; k += fromColumnCount)
                            {
                                int num12 = (k + pair.Key.ColumnCount) - 1;
                                num12 = (num12 > num8) ? (num8 - k) : num12;
                                CalcRangeIdentity identity3   = new CalcRangeIdentity((k + pair.Key.ColumnIndex) - fromColumn, (num12 - k) + 1, false);
                                CalcExpression    expression2 = pair.Value;
                                if (!offsetSelf)
                                {
                                    visitor     = new MoveVisitor(fromRange, 0, columnOffset, sourceRowCount, sourceColumnCount, false, sourceMgr.Source, sourceMgr != targetMgr, null, true);
                                    expression2 = visitor.Visit(expression2, baseRow, baseColumn);
                                }
                                else
                                {
                                    expression2 = visitor2.Visit(expression2, baseRow, baseColumn);
                                }
                                newExpressions[identity3] = expression2;
                            }
                        }
                        else if (pair.Key.IsFullRow)
                        {
                            for (int m = toRow; m <= num7; m += fromRowCount)
                            {
                                int num14 = (m + pair.Key.RowCount) - 1;
                                num14 = (num14 > num7) ? (num7 - m) : num14;
                                CalcRangeIdentity identity4   = new CalcRangeIdentity((m + pair.Key.RowIndex) - fromRow, (num14 - m) + 1, true);
                                CalcExpression    expression3 = pair.Value;
                                if (!offsetSelf)
                                {
                                    visitor     = new MoveVisitor(fromRange, rowOffset, 0, sourceRowCount, sourceColumnCount, false, sourceMgr.Source, sourceMgr != targetMgr, null, true);
                                    expression3 = visitor.Visit(expression3, baseRow, baseColumn);
                                }
                                else
                                {
                                    expression3 = visitor2.Visit(expression3, baseRow, baseColumn);
                                }
                                newExpressions[identity4] = expression3;
                            }
                        }
                        else
                        {
                            for (int n = toRow; n <= num7; n += fromRowCount)
                            {
                                int num16 = (n + pair.Key.RowCount) - 1;
                                num16 = (num16 > num7) ? (num7 - n) : num16;
                                for (int num17 = toColumn; num17 <= num8; num17 += fromColumnCount)
                                {
                                    int num18 = (num17 + pair.Key.ColumnCount) - 1;
                                    num18 = (num18 > num8) ? (num8 - num17) : num18;
                                    CalcRangeIdentity identity5   = new CalcRangeIdentity((n + pair.Key.RowIndex) - fromRow, (num17 + pair.Key.ColumnIndex) - fromColumn, (num16 - n) + 1, (num18 - num17) + 1);
                                    CalcExpression    expression4 = pair.Value;
                                    if (!offsetSelf)
                                    {
                                        expression4 = new MoveVisitor(fromRange, rowOffset, columnOffset, sourceRowCount, sourceColumnCount, false, sourceMgr.Source, sourceMgr != targetMgr, null, true).Visit(expression4, baseRow, baseColumn);
                                    }
                                    else
                                    {
                                        expression4 = visitor2.Visit(expression4, baseRow, baseColumn);
                                    }
                                    newExpressions[identity5] = expression4;
                                }
                            }
                        }
                    }
                }
            }
        }
示例#16
0
 public FormulaOperatorSource(CalcCalculationManager manager)
 {
     this.Manager = manager;
 }
示例#17
0
        Dictionary <CalcLocalIdentity, CalcExpression> GetFormulaIds(int fromRow, int fromColumn, int rowCount, int columnCount, CalcCalculationManager sourceMgr, ChangingContext context, bool clearSource)
        {
            CalcLocalIdentity id = FormulaOperatorHelper.Indexs2Identity(fromRow, fromColumn, (fromRow + rowCount) - 1, (fromColumn + columnCount) - 1);
            Dictionary <CalcLocalIdentity, CalcExpression> allContainsIds = FormulaOperatorHelper.GetAllContainsIds(sourceMgr, id);

            if (clearSource)
            {
                foreach (CalcLocalIdentity identity2 in allContainsIds.Keys)
                {
                    if (sourceMgr == this.Manager)
                    {
                        context.ChangedFormulas[identity2] = null;
                    }
                    else
                    {
                        context.AddExtChangedFormula(new FormulaOperatorSource(sourceMgr), identity2, identity2, null);
                    }
                }
            }
            return(allContainsIds);
        }
示例#18
0
        internal static void GetAllContainsIds(CalcCalculationManager mgr, CalcLocalIdentity id, out Dictionary <CalcCellIdentity, CalcExpression> cellFromulas, out Dictionary <CalcRangeIdentity, CalcExpression> arrayFormulas)
        {
            cellFromulas  = new Dictionary <CalcCellIdentity, CalcExpression>();
            arrayFormulas = new Dictionary <CalcRangeIdentity, CalcExpression>();
            CalcLocalIdentity identity   = id;
            CalcExpression    expression = mgr.GetExpression(identity);

            if ((expression == null) && (id is CalcCellIdentity))
            {
                int rowIndex                = (id as CalcCellIdentity).RowIndex;
                int columnIndex             = (id as CalcCellIdentity).ColumnIndex;
                CalcRangeIdentity identity2 = new CalcRangeIdentity(rowIndex, columnIndex, 1, 1);
                expression = mgr.GetExpression(identity2);
                identity   = identity2;
            }
            bool flag = false;

            if (expression == null)
            {
                flag = mgr.IsIsIntersectantWithArrayFormula(identity);
            }
            if (expression != null)
            {
                if (identity is CalcCellIdentity)
                {
                    cellFromulas.Add(identity as CalcCellIdentity, expression);
                }
                else if (identity is CalcRangeIdentity)
                {
                    arrayFormulas.Add(identity as CalcRangeIdentity, expression);
                }
            }
            else
            {
                if ((id is CalcCellIdentity) && flag)
                {
                    throw new InvalidOperationException(ResourceStrings.FormulaChangePartOfArrayFormulaError);
                }
                if (id is CalcRangeIdentity)
                {
                    CalcRangeIdentity identity3 = id as CalcRangeIdentity;
                    if ((identity3.RowCount != 1) || (identity3.ColumnCount != 1))
                    {
                        foreach (CalcLocalIdentity identity4 in mgr.Graph.GetAllLocalIdentities())
                        {
                            if (ContainsOrEqual(mgr, id, identity4))
                            {
                                expression = mgr.GetExpression(identity4);
                                if (expression != null)
                                {
                                    if (identity4 is CalcCellIdentity)
                                    {
                                        cellFromulas[identity4 as CalcCellIdentity] = expression;
                                    }
                                    else if (identity4 is CalcRangeIdentity)
                                    {
                                        arrayFormulas.Add(identity4 as CalcRangeIdentity, expression);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
示例#19
0
        internal static Dictionary <CalcLocalIdentity, CalcExpression> GetAllContainsIds(CalcCalculationManager mgr, CalcLocalIdentity id)
        {
            Dictionary <CalcCellIdentity, CalcExpression>  dictionary2;
            Dictionary <CalcRangeIdentity, CalcExpression> dictionary3;
            Dictionary <CalcLocalIdentity, CalcExpression> dictionary = new Dictionary <CalcLocalIdentity, CalcExpression>();

            GetAllContainsIds(mgr, id, out dictionary2, out dictionary3);
            foreach (KeyValuePair <CalcCellIdentity, CalcExpression> pair in dictionary2)
            {
                CalcCellIdentity introduced7 = pair.Key;
                dictionary[introduced7] = pair.Value;
            }
            foreach (KeyValuePair <CalcRangeIdentity, CalcExpression> pair2 in dictionary3)
            {
                CalcRangeIdentity introduced8 = pair2.Key;
                dictionary[introduced8] = pair2.Value;
            }
            return(dictionary);
        }