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 }
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)); } } } } }
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); } }
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); } } }
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); } }