Exemplo n.º 1
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);
                }
            }
        }
Exemplo n.º 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));
                        }
                    }
                }
            }
        }
Exemplo n.º 3
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);
            }
        }