Example #1
0
        internal void InsertAndCopyRange(TXlsCellRange SourceRange, TFlxInsertMode InsertMode, int DestRow, int DestCol, int aRowCount, int aColCount, TSheetInfo SheetInfo)
        {
            FNames.ArrangeInsertRange(SourceRange.OffsetForIns(DestRow, DestCol, InsertMode), aRowCount, aColCount, SheetInfo);
#if (FRAMEWORK30 && !COMPACTFRAMEWORK)
            FXlsxPivotCache.ArrangeInsertRange(SourceRange.OffsetForIns(DestRow, DestCol, InsertMode), aRowCount, aColCount, SheetInfo);
#endif
        }
Example #2
0
        internal void InsertAndCopyRange(TXlsCellRange SourceRange, TFlxInsertMode InsertMode, int DestRow, int DestCol, int aRowCount, int aColCount, TRangeCopyMode CopyMode, TSheetInfo SheetInfo)
        {
            int aCount = Count;

            for (int i = 0; i < aCount; i++)
            {
                this[i].ArrangeInsertRange(SourceRange.OffsetForIns(DestRow, DestCol, InsertMode), aRowCount, aColCount, SheetInfo);
            }

            if (CopyMode == TRangeCopyMode.None)
            {
                return;
            }

            int RTop  = SourceRange.Top;
            int RLeft = SourceRange.Left;

            if (DestRow <= SourceRange.Top)
            {
                RTop += aRowCount * SourceRange.RowCount;
            }
            if (DestCol <= SourceRange.Left)
            {
                RLeft += aColCount * SourceRange.ColCount;
            }
            int RRight  = RLeft + SourceRange.ColCount - 1;
            int RBottom = RTop + SourceRange.RowCount - 1;

            //Copy the cells.

            if (aRowCount > 0 || aColCount > 0)
            {
                for (int i = 0; i < aCount; i++)
                {
                    THLinkRecord r = this[i];
                    if (r.FirstCol >= RLeft && r.LastCol <= RRight &&
                        r.FirstRow >= RTop && r.LastRow <= RBottom)
                    {
                        for (int rc = 0; rc < aRowCount; rc++)
                        {
                            Add(((THLinkRecord)TBaseRecord.Clone(r, SheetInfo)).Offset(DestRow - RTop + rc * SourceRange.RowCount, DestCol - RLeft));
                        }
                        for (int cc = 0; cc < aColCount; cc++)
                        {
                            Add(((THLinkRecord)TBaseRecord.Clone(r, SheetInfo)).Offset(DestRow - RTop, DestCol - RLeft + cc * SourceRange.ColCount));
                        }
                    }
                }
            }
        }
Example #3
0
        internal void DeleteRange(int SheetNo, TXlsCellRange CellRange, TFlxInsertMode InsertMode)
        {
            if ((SheetNo >= Sheets.Count) || (SheetNo < 0))
            {
                XlsMessages.ThrowException(XlsErr.ErrInvalidSheetNo, SheetNo, 0, Sheets.Count - 1);
            }

            TSheetInfo SheetInfo = new TSheetInfo(SheetNo, SheetNo, SheetNo, Globals, Globals, Sheets, Sheets, false);

            if (InsertMode == TFlxInsertMode.NoneDown || InsertMode == TFlxInsertMode.NoneRight)
            {
                FSheets[SheetNo].ClearRange(CellRange);
                return;
            }

            int aRowCount = 0;
            int aColCount = 0;

            if ((InsertMode == TFlxInsertMode.ShiftRangeDown) || (InsertMode == TFlxInsertMode.ShiftRowDown))
            {
                aRowCount = 1;
            }
            else
            {
                aColCount = 1;
            }

            FSheets.DeleteRange(CellRange, aRowCount, aColCount, SheetInfo);
            Globals.DeleteRange(CellRange, aRowCount, aColCount, SheetInfo);

            //FSheets[SheetNo].FixAutoFilter(SheetNo);
            //we sadly have to reconstruct the whole autofilter, or the blue arrows will not stay correct. Just fixing AUTOFILTERINFO (with the line above) is not enough.
            if (aColCount > 0)
            {
                FSheets[SheetNo].AddNewAutoFilters(SheetNo, CellRange.Top, CellRange.Bottom, CellRange.Left, CellRange.Right);
            }
        }
Example #4
0
        internal void InsertAndCopyRange(TXlsCellRange SourceRange, int DestRow, int DestCol, int aRowCount, int aColCount, TRangeCopyMode CopyMode, TFlxInsertMode InsertMode, TSheetInfo SheetInfo)
        {
            TXlsCellRange NewCellRange = SourceRange.Offset(DestRow, DestCol);

            FList[SheetInfo.InsSheet].InsertAndCopyRange(SourceRange, DestRow, DestCol, aRowCount, aColCount, CopyMode, InsertMode, SheetInfo);
            for (int i = 0; i < Count; i++)
            {
                if (i != SheetInfo.InsSheet)
                {
                    SheetInfo.SourceFormulaSheet = i;
                    SheetInfo.DestFormulaSheet   = i;
                    FList[i].ArrangeInsertRange(NewCellRange, aRowCount, aColCount, SheetInfo);
                }
            }
        }
Example #5
0
        internal void InsertAndCopyRange(int SheetNo, TXlsCellRange SourceRange,
                                         int DestRow, int DestCol, int aRowCount, int aColCount, TRangeCopyMode CopyMode, TFlxInsertMode InsertMode, bool aSemiAbsoluteMode, TExcelObjectList ObjectsInRange)
        {
            //Some error handling
            if (
                (SourceRange.Top > SourceRange.Bottom) || (SourceRange.Top < 0) || (DestRow > FlxConsts.Max_Rows) ||
                ((CopyMode != TRangeCopyMode.None) && (aRowCount > 0) && (SourceRange.Top < DestRow) && (DestRow <= SourceRange.Bottom)) ||
                (DestRow + (SourceRange.Bottom - SourceRange.Top + 1) * aRowCount - 1 > FlxConsts.Max_Rows) ||
                (DestRow < 0)
                )
            {
                XlsMessages.ThrowException(XlsErr.ErrBadCopyRows, FlxConsts.Max_Rows + 1);
            }

            if (
                (SourceRange.Left > SourceRange.Right) || (SourceRange.Left < 0) || (DestCol > FlxConsts.Max_Columns) ||
                ((CopyMode != TRangeCopyMode.None) && (aColCount > 0) && (SourceRange.Left < DestCol) && (DestCol <= SourceRange.Right)) ||
                (DestCol + (SourceRange.Right - SourceRange.Left + 1) * aColCount - 1 > FlxConsts.Max_Columns) ||
                (DestCol < 0)
                )
            {
                XlsMessages.ThrowException(XlsErr.ErrBadCopyCols, FlxConsts.Max_Columns + 1);
            }

            if ((SheetNo < 0) || (SheetNo >= Sheets.Count))
            {
                XlsMessages.ThrowException(XlsErr.ErrInvalidSheetNo, SheetNo, 0, Sheets.Count - 1);
            }

            TSheetInfo SheetInfo = new TSheetInfo(SheetNo, SheetNo, SheetNo, Globals, Globals, Sheets, Sheets, aSemiAbsoluteMode);

            SheetInfo.ObjectsInRange = ObjectsInRange;

            FSheets.InsertAndCopyRange(
                SourceRange, DestRow, DestCol, aRowCount, aColCount,
                CopyMode, InsertMode, SheetInfo);
            Globals.InsertAndCopyRange(
                SourceRange, InsertMode, DestRow, DestCol, aRowCount, aColCount,
                SheetInfo);

            //FSheets[SheetNo].FixAutoFilter(SheetNo);  Not needed now, we are going to replace it.
            if (aColCount > 0)
            {
                FSheets[SheetNo].AddNewAutoFilters(SheetNo, SourceRange.Top, SourceRange.Bottom, DestCol, DestCol);
            }
        }