Exemple #1
0
        /// <summary>
        /// Clone this worksheet, create a new instance.
        /// </summary>
        /// <returns>New instance cloned from current worksheet.</returns>
        public Worksheet Clone(string newName = null)
        {
            if (workbook == null)
            {
                throw new ReferenceObjectNotAssociatedException("worksheet must be added into workbook to do this");
            }

            if (string.IsNullOrEmpty(newName))
            {
                newName = this.workbook.GetAvailableWorksheetName();
            }

            Worksheet newSheet = new Worksheet(this.workbook, null, 0, 0)
            {
                name      = newName,
                RootStyle = new WorksheetRangeStyle(this.RootStyle),
                //controlStyle = this.controlStyle,

                defaultColumnWidth    = this.defaultColumnWidth,
                defaultRowHeight      = this.defaultRowHeight,
                registeredNamedRanges = new Dictionary <string, NamedRange>(this.registeredNamedRanges),
#if OUTLINE
                outlines = this.outlines == null ? null : new Dictionary <RowOrColumn, OutlineCollection <ReoGridOutline> >(this.outlines),
#endif // OUTLINE
                highlightRanges = new List <HighlightRange>(this.highlightRanges),

#if FREEZE
#endif // FREEZE

#if PRINT
                pageBreakRows     = this.pageBreakRows == null ? null : new List <int>(this.pageBreakRows),
                pageBreakCols     = this.pageBreakCols == null ? null : new List <int>(this.pageBreakCols),
                userPageBreakCols = this.userPageBreakCols == null ? null : new List <int>(this.userPageBreakCols),
                userPageBreakRows = this.userPageBreakRows == null ? null : new List <int>(this.userPageBreakRows),
#endif // PRINT

                settings = this.settings,
            };

            newSheet.rows.Capacity = this.rows.Count;
            newSheet.cols.Capacity = this.cols.Count;

            // copy headers

            foreach (var rheader in this.rows)
            {
                newSheet.rows.Add(rheader.Clone(newSheet));
            }

            foreach (var cheader in this.cols)
            {
                newSheet.cols.Add(cheader.Clone(newSheet));
            }

            // copy cells
            var partialGrid = this.GetPartialGrid(RangePosition.EntireRange);

            newSheet.SetPartialGrid(RangePosition.EntireRange, partialGrid);

            //this.IterateCells(ReoGridRange.EntireRange, (row, col, cell) =>
            //{
            //	var toCell = newSheet.CreateAndGetCell(row, col);
            //	ReoGridCellUtility.CopyCell(toCell, cell);

            //	return true;
            //});

            // copy drawing objects  (TODO: cloen all objects)
            //newSheet.drawingCanvas.Children.AddRange(this.drawingCanvas.Children);

            //var nvc = newSheet.viewportController as Views.NormalViewportController;
            //if (nvc != null)
            //{
            //	nvc.Bounds = this.viewportController.Bounds;
            //	newSheet.UpdateViewportControllBounds();
            //}

            // copy freeze info
            var frozenPos = this.FreezePos;

            if (frozenPos.Row > 0 || frozenPos.Col > 0)
            {
                newSheet.FreezeToCell(frozenPos, this.FreezeArea);
            }

            newSheet.ScaleFactor = this.ScaleFactor;

            newSheet.UpdateViewportController();

            return(newSheet);
        }