diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs index 3363000..f36d499 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs @@ -967,16 +967,16 @@ Worksheet.Range(Address.RowNumber, Address.ColumnNumber, maxRows, maxColumns).Clear(); } - for (var ro = 1; ro <= maxRows; ro++) + Int32 minRow = asRange.RangeAddress.FirstAddress.RowNumber; + Int32 minColumn = asRange.RangeAddress.FirstAddress.ColumnNumber; + foreach (var sourceCell in asRange.CellsUsed()) { - for (var co = 1; co <= maxColumns; co++) - { - var sourceCell = asRange.Cell(ro, co); - var targetCell = Worksheet.Cell(Address.RowNumber + ro - 1, Address.ColumnNumber + co - 1); - targetCell.CopyFrom(sourceCell); - //targetCell.Style = sourceCell.style; - } + Worksheet.Cell( + Address.RowNumber + sourceCell.Address.RowNumber - minRow, + Address.ColumnNumber + sourceCell.Address.ColumnNumber - minColumn + ).CopyFrom(sourceCell as XLCell); } + var rangesToMerge = new List(); foreach (var mergedRange in (asRange.Worksheet).Internals.MergedRanges) { diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs index dda62ef..072375f 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Columns/XLColumn.cs @@ -697,80 +697,29 @@ return this; } - private void CopyToCell(IXLRangeColumn rngColumn, XLCell cell) - { - Int32 cellCount = rngColumn.CellCount(); - Int32 roStart = cell.Address.RowNumber; - Int32 coStart = cell.Address.ColumnNumber; - for (Int32 ro = roStart; ro <= cellCount + roStart - 1; ro++) - { - cell.Worksheet.Cell(ro, coStart).CopyFrom((XLCell) rngColumn.Cell(ro - roStart + 1)); - } - } - IXLRangeColumn IXLColumn.CopyTo(IXLCell target) { - var rngUsed = RangeUsed(true).Column(1); - CopyToCell(rngUsed, (XLCell) target); - - Int32 lastRowNumber = target.Address.RowNumber + rngUsed.CellCount() - 1; - if (lastRowNumber > ExcelHelper.MaxRowNumber) - { - lastRowNumber = ExcelHelper.MaxRowNumber; - } - - return target.Worksheet.Range( - target.Address.RowNumber, - target.Address.ColumnNumber, - lastRowNumber, - target.Address.ColumnNumber) - .Column(1); + return AsRange().CopyTo(target).Column(1); } public override void CopyTo(IXLCell target) { - ((IXLColumn) this).CopyTo(target); + CopyTo(target); } IXLRangeColumn IXLColumn.CopyTo(IXLRangeBase target) { - var thisRangeUsed = RangeUsed(true); - Int32 thisRowCount = thisRangeUsed.RowCount(); - var targetRangeUsed = target.AsRange().RangeUsed(); - Int32 targetRowCount = targetRangeUsed.RowCount(); - Int32 maxRow = thisRowCount > targetRowCount ? thisRowCount : targetRowCount; - - CopyToCell(Range(1, 1, maxRow, 1).Column(1), (XLCell) target.FirstCell()); - - Int32 lastRowNumber = target.RangeAddress.FirstAddress.RowNumber + maxRow - 1; - if (lastRowNumber > ExcelHelper.MaxRowNumber) - { - lastRowNumber = ExcelHelper.MaxRowNumber; - } - - return (target as XLRangeBase).Worksheet.Range( - target.RangeAddress.FirstAddress.RowNumber, - target.RangeAddress.LastAddress.ColumnNumber, - lastRowNumber, - target.RangeAddress.LastAddress.ColumnNumber) - .Column(1); + return AsRange().CopyTo(target).Column(1); } public override void CopyTo(IXLRangeBase target) { - ((IXLColumn)this).CopyTo(target); + CopyTo(target); } public IXLColumn CopyTo(IXLColumn column) { column.Clear(); - var originalRange = RangeUsed(true); - if (!ReferenceEquals(originalRange, null)) - { - int rowNumber = originalRange.RowCount(); - var destRange = column.Worksheet.Range(ExcelHelper.MinRowNumber, column.ColumnNumber(), rowNumber, column.ColumnNumber()); - originalRange.CopyTo(destRange); - //Old - //CopyToCell(Column(1, rowNumber), (XLCell) column.FirstCell()); - } + AsRange().CopyTo(column).Column(1); + var newColumn = (XLColumn) column; newColumn._width = _width; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs index d21dbab..cb6aa1a 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Rows/XLRow.cs @@ -627,79 +627,29 @@ return this; } - private void CopyToCell(IXLRangeRow rngRow, XLCell cell) - { - Int32 cellCount = rngRow.CellCount(); - Int32 roStart = cell.Address.RowNumber; - Int32 coStart = cell.Address.ColumnNumber; - for (Int32 co = coStart; co <= cellCount + coStart - 1; co++) - { - (cell.Worksheet.Cell(roStart, co)).CopyFrom((XLCell) rngRow.Cell(co - coStart + 1)); - } - } - IXLRangeRow IXLRow.CopyTo(IXLCell target) { - var rngUsed = RangeUsed(true).Row(1); - CopyToCell(rngUsed, (XLCell) target); - - Int32 lastColumnNumber = target.Address.ColumnNumber + rngUsed.CellCount() - 1; - if (lastColumnNumber > ExcelHelper.MaxColumnNumber) - { - lastColumnNumber = ExcelHelper.MaxColumnNumber; - } - - return target.Worksheet.Range( - target.Address.RowNumber, - target.Address.ColumnNumber, - target.Address.RowNumber, - lastColumnNumber) - .Row(1); + return AsRange().CopyTo(target).Row(1); } public override void CopyTo(IXLCell target) { - ((IXLRow)this).CopyTo(target); + CopyTo(target); } IXLRangeRow IXLRow.CopyTo(IXLRangeBase target) { - var thisRangeUsed = RangeUsed(true); - Int32 thisColumnCount = thisRangeUsed.ColumnCount(); - var targetRangeUsed = target.AsRange().RangeUsed(); - Int32 targetColumnCount = targetRangeUsed.ColumnCount(); - Int32 maxColumn = thisColumnCount > targetColumnCount ? thisColumnCount : targetColumnCount; - - CopyToCell(Range(1, 1, 1, maxColumn).Row(1), (XLCell)target.FirstCell()); - - Int32 lastColumnNumber = target.RangeAddress.LastAddress.ColumnNumber + maxColumn - 1; - if (lastColumnNumber > ExcelHelper.MaxColumnNumber) - { - lastColumnNumber = ExcelHelper.MaxColumnNumber; - } - - return target.Worksheet.Range(target.RangeAddress.FirstAddress.RowNumber, - target.RangeAddress.LastAddress.ColumnNumber, - target.RangeAddress.FirstAddress.RowNumber, - lastColumnNumber) - .Row(1); + return AsRange().CopyTo(target).Row(1); } public override void CopyTo(IXLRangeBase target) { - ((IXLRow) this).CopyTo(target); + CopyTo(target); } public IXLRow CopyTo(IXLRow row) { row.Clear(); - var originalRange = RangeUsed(true); - if (!ReferenceEquals(originalRange, null)) - { - int columnNumber = originalRange.ColumnCount(); - var destRange = row.Worksheet.Range(row.RowNumber(), ExcelHelper.MinColumnNumber, row.RowNumber(), columnNumber); - originalRange.CopyTo(destRange); - //Old - //CopyToCell(Row(1, columnNumber), (XLCell) row.FirstCell()); - } - var newRow = (XLRow) row; + AsRange().CopyTo(row); + + var newRow = (XLRow)row; newRow.m_height = m_height; newRow.style = new XLStyle(newRow, Style); return newRow;