Пример #1
0
 bool UndoSetArrayFormula(Excel excel)
 {
     base.SuspendInvalidate(excel);
     _workSheet.SuspendCalcService();
     try
     {
         using (((IUIActionExecuter)_workSheet).BeginUIAction())
         {
             excel.ActiveSheet.SetArrayFormula(_arrayFormulaRange.Row, _arrayFormulaRange.Column, _arrayFormulaRange.RowCount, _arrayFormulaRange.ColumnCount, null);
         }
         CellRange range  = new CellRange(_arrayFormulaRange.Row, _arrayFormulaRange.Column, _arrayFormulaRange.RowCount, _arrayFormulaRange.ColumnCount);
         CellRange range2 = AdjustRange(range);
         CopyMoveHelper.UndoCellsInfo(_workSheet, _savedArrayFormulaViewportCells, range2.Row, range2.Column, SheetArea.Cells);
         excel.SetActiveCell(Math.Max(0, range.Row), Math.Max(0, range.Column), true);
         _workSheet.SetSelection(range);
     }
     finally
     {
         _workSheet.ResumeCalcService();
         base.ResumeInvalidate(excel);
     }
     excel.RefreshRange(-1, -1, -1, -1, SheetArea.Cells | SheetArea.ColumnHeader | SheetArea.RowHeader);
     return(true);
 }
Пример #2
0
        void UndoRangeStates(CopyMoveCellsInfo savedInfo, CellRange range)
        {
            CellRange range2 = AdjustRange(range);

            CopyMoveHelper.UndoCellsInfo(_workSheet, savedInfo, range2.Row, range2.Column, SheetArea.Cells);
        }
Пример #3
0
        /// <summary>
        /// Undoes the action of the saved information.
        /// </summary>
        /// <param name="parameter">The parameter to undo the action on. </param>
        /// <returns>
        /// <c>true</c> if the undo action succeeds; otherwise, <c>false</c>.
        /// </returns>
        public bool Undo(object parameter)
        {
            if (!Excel.IsValidRange(_dragDropExtent.FromRow, _dragDropExtent.FromColumn, _dragDropExtent.RowCount, _dragDropExtent.ColumnCount, _sheet.RowCount, _sheet.ColumnCount))
            {
                return(false);
            }
            if (!_insert && !Excel.IsValidRange(_dragDropExtent.ToRow, _dragDropExtent.ToColumn, _dragDropExtent.RowCount, _dragDropExtent.ColumnCount, _sheet.RowCount, _sheet.ColumnCount))
            {
                return(false);
            }
            bool  flag      = false;
            Excel sheetView = parameter as Excel;

            if (_insert)
            {
                if ((_dragDropExtent.FromColumn < 0) || (_dragDropExtent.FromRow < 0))
                {
                    if (_dragDropExtent.FromColumn >= 0)
                    {
                        int fromColumn  = _dragDropExtent.FromColumn;
                        int columnCount = _dragDropExtent.ColumnCount;
                        base.SuspendInvalidate(parameter);
                        try
                        {
                            if (_copy)
                            {
                                _sheet.RemoveColumns(_dragDropExtent.ToColumn, columnCount);
                            }
                            else
                            {
                                int toColumn = _dragDropExtent.ToColumn;
                                int column   = _dragDropExtent.FromColumn;
                                if (_dragDropExtent.FromColumn < _dragDropExtent.ToColumn)
                                {
                                    toColumn = _dragDropExtent.ToColumn - columnCount;
                                }
                                else
                                {
                                    column = _dragDropExtent.FromColumn + columnCount;
                                }
                                _sheet.AddColumns(column, columnCount);
                                _sheet.CopyTo(-1, (column <= toColumn) ? (toColumn + columnCount) : toColumn, -1, column, -1, columnCount, _option);
                                _sheet.RemoveColumns((column <= toColumn) ? (toColumn + columnCount) : toColumn, columnCount);
                                if (toColumn < column)
                                {
                                    fromColumn = column - columnCount;
                                }
                            }
                        }
                        finally
                        {
                            base.ResumeInvalidate(parameter);
                        }
                        if (sheetView != null)
                        {
                            CellRange[] oldSelection = Enumerable.ToArray <CellRange>((IEnumerable <CellRange>)sheetView.ActiveSheet.Selections);
                            sheetView.SetSelection(-1, fromColumn, -1, columnCount);
                            if (sheetView.RaiseSelectionChanging(oldSelection, Enumerable.ToArray <CellRange>((IEnumerable <CellRange>)sheetView.ActiveSheet.Selections)))
                            {
                                sheetView.RaiseSelectionChanged();
                            }
                            sheetView.RefreshRange(-1, -1, -1, -1, SheetArea.Cells | SheetArea.ColumnHeader | SheetArea.RowHeader);
                            sheetView.RefreshFloatingObjects();
                        }
                        flag = true;
                    }
                    else if (_dragDropExtent.FromRow >= 0)
                    {
                        int rowCount = _dragDropExtent.RowCount;
                        int fromRow  = _dragDropExtent.FromRow;
                        base.SuspendInvalidate(parameter);
                        try
                        {
                            if (_copy)
                            {
                                _sheet.RemoveRows(_dragDropExtent.ToRow, rowCount);
                            }
                            else
                            {
                                int toRow = _dragDropExtent.ToRow;
                                int row   = _dragDropExtent.FromRow;
                                if (_dragDropExtent.FromRow < _dragDropExtent.ToRow)
                                {
                                    toRow = _dragDropExtent.ToRow - rowCount;
                                }
                                else
                                {
                                    row = _dragDropExtent.FromRow + rowCount;
                                }
                                _sheet.AddRows(row, rowCount);
                                if (_savedFromViewportCells != null)
                                {
                                    CopyMoveHelper.UndoCellsInfo(_sheet, _savedFromViewportCells, row, 0, SheetArea.Cells);
                                    flag = true;
                                }
                                if (_savedFromRowHeaderCells != null)
                                {
                                    CopyMoveHelper.UndoCellsInfo(_sheet, _savedFromRowHeaderCells, row, 0, SheetArea.CornerHeader | SheetArea.RowHeader);
                                    flag = true;
                                }
                                if (_savedFromRows != null)
                                {
                                    CopyMoveHelper.UndoRowsInfo(_sheet, _savedFromRows, row);
                                    flag = true;
                                }
                                if (!flag)
                                {
                                    _sheet.MoveTo((row <= toRow) ? (toRow + rowCount) : toRow, -1, row, -1, rowCount, -1, _option);
                                }
                                _sheet.RemoveRows((row <= toRow) ? (toRow + rowCount) : toRow, rowCount);
                                if (toRow < row)
                                {
                                    fromRow = row - rowCount;
                                }
                            }
                        }
                        finally
                        {
                            base.ResumeInvalidate(parameter);
                        }
                        if (sheetView != null)
                        {
                            CellRange[] rangeArray2 = Enumerable.ToArray <CellRange>((IEnumerable <CellRange>)sheetView.ActiveSheet.Selections);
                            sheetView.SetSelection(fromRow, -1, rowCount, -1);
                            if (sheetView.RaiseSelectionChanging(rangeArray2, Enumerable.ToArray <CellRange>((IEnumerable <CellRange>)sheetView.ActiveSheet.Selections)))
                            {
                                sheetView.RaiseSelectionChanged();
                            }
                            sheetView.RefreshAll();
                            sheetView.UpdateLayout();
                            sheetView.RefreshFloatingObjects();
                        }
                        flag = true;
                    }
                }
            }
            else
            {
                int             num9      = (_dragDropExtent.FromRow < 0) ? 0 : _dragDropExtent.FromRow;
                int             num10     = (_dragDropExtent.FromColumn < 0) ? 0 : _dragDropExtent.FromColumn;
                int             num11     = (_dragDropExtent.ToRow < 0) ? 0 : _dragDropExtent.ToRow;
                int             num12     = (_dragDropExtent.ToColumn < 0) ? 0 : _dragDropExtent.ToColumn;
                int             num13     = (_dragDropExtent.FromRow < 0) ? _sheet.RowCount : _dragDropExtent.RowCount;
                int             num14     = (_dragDropExtent.FromColumn < 0) ? _sheet.ColumnCount : _dragDropExtent.ColumnCount;
                List <CellData> oldValues = null;
                List <CellData> list2     = null;
                if ((!_copy && (_savedFromViewportCells != null)) && _savedFromViewportCells.IsValueSaved())
                {
                    list2 = CopyMoveHelper.GetValues(_sheet, num9, num10, num13, num14);
                }
                if ((_savedToViewportCells != null) && _savedToViewportCells.IsValueSaved())
                {
                    oldValues = CopyMoveHelper.GetValues(_sheet, num11, num12, num13, num14);
                }
                base.SuspendInvalidate(parameter);
                try
                {
                    if (_savedToColumnHeaderCells != null)
                    {
                        CopyMoveHelper.UndoCellsInfo(_sheet, _savedToColumnHeaderCells, 0, num12, SheetArea.ColumnHeader);
                        flag = true;
                    }
                    if (_savedToColumns != null)
                    {
                        CopyMoveHelper.UndoColumnsInfo(_sheet, _savedToColumns, num12);
                        flag = true;
                    }
                    if (_savedToViewportCells != null)
                    {
                        CopyMoveHelper.UndoCellsInfo(_sheet, _savedToViewportCells, num11, num12, SheetArea.Cells);
                        flag = true;
                    }
                    if (_savedToRowHeaderCells != null)
                    {
                        CopyMoveHelper.UndoCellsInfo(_sheet, _savedToRowHeaderCells, num11, 0, SheetArea.CornerHeader | SheetArea.RowHeader);
                        flag = true;
                    }
                    if (_savedToRows != null)
                    {
                        CopyMoveHelper.UndoRowsInfo(_sheet, _savedToRows, num11);
                        flag = true;
                    }
                    if (_savedToFloatingObjects != null)
                    {
                        CopyMoveHelper.UndoFloatingObjectsInfo(_sheet, _savedToFloatingObjects);
                        sheetView.RefreshFloatingObjects();
                        flag = true;
                    }
                    if (_savedFromColumnHeaderCells != null)
                    {
                        CopyMoveHelper.UndoCellsInfo(_sheet, _savedFromColumnHeaderCells, 0, num10, SheetArea.ColumnHeader);
                        flag = true;
                    }
                    if (_savedFromColumns != null)
                    {
                        CopyMoveHelper.UndoColumnsInfo(_sheet, _savedFromColumns, num10);
                        flag = true;
                    }
                    if (_savedFromViewportCells != null)
                    {
                        CopyMoveHelper.UndoCellsInfo(_sheet, _savedFromViewportCells, num9, num10, SheetArea.Cells);
                        flag = true;
                    }
                    if (_savedFromRowHeaderCells != null)
                    {
                        CopyMoveHelper.UndoCellsInfo(_sheet, _savedFromRowHeaderCells, num9, 0, SheetArea.CornerHeader | SheetArea.RowHeader);
                        flag = true;
                    }
                    if (_savedFromRows != null)
                    {
                        CopyMoveHelper.UndoRowsInfo(_sheet, _savedFromRows, num9);
                        flag = true;
                    }
                    if (_savedFromFloatingObjects != null)
                    {
                        CopyMoveHelper.UndoFloatingObjectsInfo(_sheet, _savedFromFloatingObjects);
                        sheetView.RefreshFloatingObjects();
                        flag = true;
                    }
                }
                finally
                {
                    base.ResumeInvalidate(parameter);
                }
                if (flag && (sheetView != null))
                {
                    CellRange[] rangeArray3 = Enumerable.ToArray <CellRange>((IEnumerable <CellRange>)sheetView.ActiveSheet.Selections);
                    sheetView.SetSelection(_dragDropExtent.FromRow, _dragDropExtent.FromColumn, _dragDropExtent.RowCount, _dragDropExtent.ColumnCount);
                    if (sheetView.RaiseSelectionChanging(rangeArray3, Enumerable.ToArray <CellRange>((IEnumerable <CellRange>)sheetView.ActiveSheet.Selections)))
                    {
                        sheetView.RaiseSelectionChanged();
                    }
                    if (oldValues != null)
                    {
                        CopyMoveHelper.RaiseValueChanged(sheetView, num11, num12, num13, num14, oldValues);
                    }
                    if (list2 != null)
                    {
                        CopyMoveHelper.RaiseValueChanged(sheetView, num9, num10, num13, num14, list2);
                    }
                    sheetView.RefreshRange(-1, -1, -1, -1, SheetArea.Cells | SheetArea.ColumnHeader | SheetArea.RowHeader);
                    sheetView.RefreshFloatingObjects();
                }
            }
            if (flag && (sheetView != null))
            {
                if ((_savedAcitveRowViewportIndex != -2) && (_savedAcitveColumnViewportIndex != -2))
                {
                    sheetView.SetActiveRowViewportIndex(_savedAcitveRowViewportIndex);
                    sheetView.SetActiveColumnViewportIndex(_savedAcitveColumnViewportIndex);
                }
                if ((_savedActiveRow != -1) && (_savedActiveColumn != -1))
                {
                    CellRange range = sheetView.ActiveSheet.Selections[0];
                    if (range.Contains(_savedActiveRow, _savedActiveColumn))
                    {
                        sheetView.SetActiveCell(_savedActiveRow, _savedActiveColumn, false);
                    }
                    else
                    {
                        sheetView.SetActiveCell(Math.Max(0, range.Row), Math.Max(0, range.Column), false);
                    }
                }
                if (((_savedAcitveRowViewportIndex != -2) && (_savedAcitveColumnViewportIndex != -2)) && ((_savedActiveRow != -1) && (_savedActiveColumn != -1)))
                {
                    sheetView.ShowCell(_savedAcitveRowViewportIndex, _savedAcitveColumnViewportIndex, _savedActiveRow, _savedActiveColumn, VerticalPosition.Nearest, HorizontalPosition.Nearest);
                }
            }
            return(flag);
        }