diff --git a/ClosedXML/Excel/PageSetup/XLPageSetup.cs b/ClosedXML/Excel/PageSetup/XLPageSetup.cs
index 9aca46d..8fdc197 100644
--- a/ClosedXML/Excel/PageSetup/XLPageSetup.cs
+++ b/ClosedXML/Excel/PageSetup/XLPageSetup.cs
@@ -192,11 +192,13 @@
{
if (!RowBreaks.Contains(row))
RowBreaks.Add(row);
+ RowBreaks.Sort();
}
public void AddVerticalPageBreak(Int32 column)
{
if (!ColumnBreaks.Contains(column))
ColumnBreaks.Add(column);
+ ColumnBreaks.Sort();
}
//public void SetPageBreak(IXLRange range, XLPageBreakLocations breakLocation)
diff --git a/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/Excel/XLWorksheet.cs
index 6bd296d..227ee49 100644
--- a/ClosedXML/Excel/XLWorksheet.cs
+++ b/ClosedXML/Excel/XLWorksheet.cs
@@ -1165,7 +1165,21 @@
Workbook.Worksheets.ForEach(ws => MoveNamedRangesColumns(range, columnsShifted, ws.NamedRanges));
MoveNamedRangesColumns(range, columnsShifted, Workbook.NamedRanges);
ShiftConditionalFormattingColumns(range, columnsShifted);
+ ShiftPageBreaksColumns(range, columnsShifted);
}
+
+ private void ShiftPageBreaksColumns(XLRange range, int columnsShifted)
+ {
+ for (var i = 0; i < PageSetup.ColumnBreaks.Count; i++)
+ {
+ int br = PageSetup.ColumnBreaks[i];
+ if (range.RangeAddress.FirstAddress.ColumnNumber <= br)
+ {
+ PageSetup.ColumnBreaks[i] = br + columnsShifted;
+ }
+ }
+ }
+
private void ShiftConditionalFormattingColumns(XLRange range, int columnsShifted)
{
Int32 firstColumn = range.RangeAddress.FirstAddress.ColumnNumber;
@@ -1219,7 +1233,21 @@
Workbook.Worksheets.ForEach(ws => MoveNamedRangesRows(range, rowsShifted, ws.NamedRanges));
MoveNamedRangesRows(range, rowsShifted, Workbook.NamedRanges);
ShiftConditionalFormattingRows(range, rowsShifted);
+ ShiftPageBreaksRows(range, rowsShifted);
}
+
+ private void ShiftPageBreaksRows(XLRange range, int rowsShifted)
+ {
+ for (var i = 0; i < PageSetup.RowBreaks.Count; i++)
+ {
+ int br = PageSetup.RowBreaks[i];
+ if (range.RangeAddress.FirstAddress.RowNumber <= br)
+ {
+ PageSetup.RowBreaks[i] = br + rowsShifted;
+ }
+ }
+ }
+
private void ShiftConditionalFormattingRows(XLRange range, int rowsShifted)
{
Int32 firstRow = range.RangeAddress.FirstAddress.RowNumber;
diff --git a/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML_Tests/ClosedXML_Tests.csproj
index 5e7e48e..e89fd07 100644
--- a/ClosedXML_Tests/ClosedXML_Tests.csproj
+++ b/ClosedXML_Tests/ClosedXML_Tests.csproj
@@ -77,6 +77,7 @@
+
diff --git a/ClosedXML_Tests/Excel/PageSetup/PageBreaksTests.cs b/ClosedXML_Tests/Excel/PageSetup/PageBreaksTests.cs
new file mode 100644
index 0000000..04d7464
--- /dev/null
+++ b/ClosedXML_Tests/Excel/PageSetup/PageBreaksTests.cs
@@ -0,0 +1,78 @@
+using System.Diagnostics;
+using ClosedXML.Excel;
+using NUnit.Framework;
+
+namespace ClosedXML_Tests.Excel
+{
+ [TestFixture]
+ public class PageBreaksTests
+ {
+ [Test]
+ public void RowBreaksShouldBeSorted()
+ {
+ var wb = new XLWorkbook();
+ IXLWorksheet sheet = wb.AddWorksheet("Sheet1");
+
+ sheet.PageSetup.AddHorizontalPageBreak(10);
+ sheet.PageSetup.AddHorizontalPageBreak(12);
+ sheet.PageSetup.AddHorizontalPageBreak(5);
+ Assert.That(sheet.PageSetup.RowBreaks, Is.EqualTo(new[] { 5, 10, 12 }));
+ }
+
+ [Test]
+ public void ColumnBreaksShouldBeSorted()
+ {
+ var wb = new XLWorkbook();
+ IXLWorksheet sheet = wb.AddWorksheet("Sheet1");
+
+ sheet.PageSetup.AddVerticalPageBreak(10);
+ sheet.PageSetup.AddVerticalPageBreak(12);
+ sheet.PageSetup.AddVerticalPageBreak(5);
+ Assert.That(sheet.PageSetup.ColumnBreaks, Is.EqualTo(new[] { 5, 10, 12 }));
+ }
+
+ [Test]
+ public void RowBreaksShiftWhenInsertedRowAbove()
+ {
+ var wb = new XLWorkbook();
+ IXLWorksheet sheet = wb.AddWorksheet("Sheet1");
+
+ sheet.PageSetup.AddHorizontalPageBreak(10);
+ sheet.Row(5).InsertRowsAbove(1);
+ Assert.AreEqual(11, sheet.PageSetup.RowBreaks[0]);
+ }
+
+ [Test]
+ public void RowBreaksNotShiftWhenInsertedRowBelow()
+ {
+ var wb = new XLWorkbook();
+ IXLWorksheet sheet = wb.AddWorksheet("Sheet1");
+
+ sheet.PageSetup.AddHorizontalPageBreak(10);
+ sheet.Row(15).InsertRowsAbove(1);
+ Assert.AreEqual(10, sheet.PageSetup.RowBreaks[0]);
+ }
+
+ [Test]
+ public void ColumnBreaksShiftWhenInsertedColumnBefore()
+ {
+ var wb = new XLWorkbook();
+ IXLWorksheet sheet = wb.AddWorksheet("Sheet1");
+
+ sheet.PageSetup.AddVerticalPageBreak(10);
+ sheet.Column(5).InsertColumnsBefore(1);
+ Assert.AreEqual(11, sheet.PageSetup.ColumnBreaks[0]);
+ }
+
+ [Test]
+ public void ColumnBreaksNotShiftWhenInsertedColumnAfter()
+ {
+ var wb = new XLWorkbook();
+ IXLWorksheet sheet = wb.AddWorksheet("Sheet1");
+
+ sheet.PageSetup.AddVerticalPageBreak(10);
+ sheet.Column(15).InsertColumnsBefore(1);
+ Assert.AreEqual(10, sheet.PageSetup.ColumnBreaks[0]);
+ }
+ }
+}
\ No newline at end of file