diff --git a/ClosedXML/Excel/Columns/XLColumn.cs b/ClosedXML/Excel/Columns/XLColumn.cs index 8e5d1b8..3a4e6b7 100644 --- a/ClosedXML/Excel/Columns/XLColumn.cs +++ b/ClosedXML/Excel/Columns/XLColumn.cs @@ -663,16 +663,19 @@ private void WorksheetRangeShiftedColumns(XLRange range, int columnsShifted) { - if (range.RangeAddress.FirstAddress.ColumnNumber <= ColumnNumber()) + if (!range.RangeAddress.IsInvalid && + !RangeAddress.IsInvalid && + range.RangeAddress.FirstAddress.ColumnNumber <= ColumnNumber()) SetColumnNumber(ColumnNumber() + columnsShifted); } private void SetColumnNumber(int column) { if (column <= 0) - RangeAddress.IsInvalid = false; + RangeAddress.IsInvalid = true; else { + RangeAddress.IsInvalid = false; RangeAddress.FirstAddress = new XLAddress(Worksheet, 1, column, diff --git a/ClosedXML/Excel/Rows/XLRow.cs b/ClosedXML/Excel/Rows/XLRow.cs index baa624b..1a7dc03 100644 --- a/ClosedXML/Excel/Rows/XLRow.cs +++ b/ClosedXML/Excel/Rows/XLRow.cs @@ -597,16 +597,19 @@ private void WorksheetRangeShiftedRows(XLRange range, int rowsShifted) { - if (range.RangeAddress.FirstAddress.RowNumber <= RowNumber()) + if (!range.RangeAddress.IsInvalid && + !RangeAddress.IsInvalid && + range.RangeAddress.FirstAddress.RowNumber <= RowNumber()) SetRowNumber(RowNumber() + rowsShifted); } private void SetRowNumber(Int32 row) { if (row <= 0) - RangeAddress.IsInvalid = false; + RangeAddress.IsInvalid = true; else { + RangeAddress.IsInvalid = false; RangeAddress.FirstAddress = new XLAddress(Worksheet, row, 1, RangeAddress.FirstAddress.FixedRow, RangeAddress.FirstAddress.FixedColumn); RangeAddress.LastAddress = new XLAddress(Worksheet, diff --git a/ClosedXML_Tests/Excel/Columns/ColumnTests.cs b/ClosedXML_Tests/Excel/Columns/ColumnTests.cs index 5410863..ef6bd08 100644 --- a/ClosedXML_Tests/Excel/Columns/ColumnTests.cs +++ b/ClosedXML_Tests/Excel/Columns/ColumnTests.cs @@ -237,5 +237,14 @@ Assert.AreEqual(2, lastCoUsed); } + [Test] + public void NegativeColumnNumberIsInvalid() + { + var ws = new XLWorkbook().AddWorksheet("Sheet1") as XLWorksheet; + + var column = new XLColumn(-1, new XLColumnParameters(ws, 0, false)); + + Assert.IsTrue(column.RangeAddress.IsInvalid); + } } } diff --git a/ClosedXML_Tests/Excel/Rows/RowTests.cs b/ClosedXML_Tests/Excel/Rows/RowTests.cs index bb74d4f..003a5e1 100644 --- a/ClosedXML_Tests/Excel/Rows/RowTests.cs +++ b/ClosedXML_Tests/Excel/Rows/RowTests.cs @@ -253,5 +253,15 @@ ws.Rows(1, 2).Group(); ws.Rows(1, 2).Ungroup(true); } + + [Test] + public void NegativeRowNumberIsInvalid() + { + var ws = new XLWorkbook().AddWorksheet("Sheet1") as XLWorksheet; + + var row = new XLRow(-1, new XLRowParameters(ws, 0, false)); + + Assert.IsTrue(row.RangeAddress.IsInvalid); + } } }