diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs index 6578432..6bf8e30 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRange.cs @@ -837,6 +837,9 @@ public XLRangeRow Row(Int32 row) { + if (row <= 0 || row > ExcelHelper.MaxRowNumber) + throw new IndexOutOfRangeException(String.Format("Row number must be between 1 and {0}", ExcelHelper.MaxRowNumber)); + var firstCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber + row - 1, RangeAddress.FirstAddress.ColumnNumber, @@ -869,6 +872,9 @@ public XLRangeColumn Column(Int32 column) { + if (column <= 0 || column > ExcelHelper.MaxColumnNumber) + throw new IndexOutOfRangeException(String.Format("Column number must be between 1 and {0}", ExcelHelper.MaxColumnNumber)); + var firstCellAddress = new XLAddress(Worksheet, RangeAddress.FirstAddress.RowNumber, RangeAddress.FirstAddress.ColumnNumber + column - 1, diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs index 34321f0..dcd87e3 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Ranges/XLRangeBase.cs @@ -435,8 +435,15 @@ { var absoluteAddress = cellAddressInRange + RangeAddress.FirstAddress - 1; + if (absoluteAddress.RowNumber <= 0 || absoluteAddress.RowNumber > ExcelHelper.MaxRowNumber) + throw new IndexOutOfRangeException(String.Format("Row number must be between 1 and {0}", ExcelHelper.MaxRowNumber)); + + if (absoluteAddress.ColumnNumber <= 0 || absoluteAddress.ColumnNumber > ExcelHelper.MaxColumnNumber) + throw new IndexOutOfRangeException(String.Format("Column number must be between 1 and {0}", ExcelHelper.MaxColumnNumber)); + var cell = Worksheet.Internals.CellsCollection.GetCell(absoluteAddress.RowNumber, absoluteAddress.ColumnNumber); + if(cell!=null) return cell; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs index 31c811b..7a07fcf 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTable.cs @@ -187,6 +187,9 @@ public new IXLTableRow Row(int row) { + if (row <= 0 || row > ExcelHelper.MaxRowNumber) + throw new IndexOutOfRangeException(String.Format("Row number must be between 1 and {0}", ExcelHelper.MaxRowNumber)); + return new XLTableRow(this, (XLRangeRow) base.Row(row + 1)); } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index 86e96c0..24cded0 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -433,6 +433,9 @@ public XLColumn Column(Int32 column) { + if (column <= 0 || column > ExcelHelper.MaxColumnNumber) + throw new IndexOutOfRangeException(String.Format("Column number must be between 1 and {0}", ExcelHelper.MaxColumnNumber)); + if (!Internals.ColumnsCollection.ContainsKey(column)) { // This is a new row so we're going to reference all @@ -1074,6 +1077,9 @@ public XLRow Row(Int32 row, Boolean pingCells) { + if(row <= 0 || row > ExcelHelper.MaxRowNumber) + throw new IndexOutOfRangeException(String.Format("Row number must be between 1 and {0}", ExcelHelper.MaxRowNumber)); + IXLStyle styleToUse; if (Internals.RowsCollection.ContainsKey(row)) styleToUse = Internals.RowsCollection[row].Style;