blob: ada2477089949958c5ed408b2f99a2618142a574 [file] [log] [blame]
/*******************************************************************************
* You may amend and distribute as you like, but don't remove this header!
*
* EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
* See http://www.codeplex.com/EPPlus for details.
*
* Copyright (C) 2011 Jan Källman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
* If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
*
* All code and executables are provided "as is" with no warranty either express or implied.
* The author accepts no liability for any damage or loss of business that this product may cause.
*
* Code change notes:
*
* Author Change Date
* ******************************************************************************
* Jan Källman Initial Release 2009-10-01
* Jan Källman License changed GPL-->LGPL 2011-12-27
*******************************************************************************/
using System;
namespace AppsheetEpplus;
/// <summary>
/// A range of cells.
/// </summary>
public class ExcelRange : ExcelRangeBase {
internal ExcelRange(ExcelWorksheet sheet, string address)
: base(sheet, address) {}
internal ExcelRange(ExcelWorksheet sheet, int fromRow, int fromCol, int toRow, int toCol)
: base(sheet) {
_fromRow = fromRow;
_fromCol = fromCol;
_toRow = toRow;
_toCol = toCol;
}
/// <summary>
/// Access the range using an address
/// </summary>
/// <param name="address">The address</param>
/// <returns>A range object</returns>
public ExcelRange this[string address] {
get {
if (_worksheet.Names.ContainsKey(address)) {
if (_worksheet.Names[address].IsName) {
return null;
}
Address = _worksheet.Names[address].Address;
} else {
Address = address;
}
return this;
}
}
/// <summary>
/// Access a single cell
/// </summary>
/// <param name="row">The row</param>
/// <param name="col">The column</param>
/// <returns>A range object</returns>
public ExcelRange this[int row, int col] {
get {
ValidateRowCol(row, col);
_fromCol = col;
_fromRow = row;
_toCol = col;
_toRow = row;
Address = GetAddress(_fromRow, _fromCol);
return this;
}
}
/// <summary>
/// Access a range of cells
/// </summary>
/// <param name="fromRow">Start row</param>
/// <param name="fromCol">Start column</param>
/// <param name="toRow">End Row</param>
/// <param name="toCol">End Column</param>
/// <returns></returns>
public ExcelRange this[int fromRow, int fromCol, int toRow, int toCol] {
get {
ValidateRowCol(fromRow, fromCol);
ValidateRowCol(toRow, toCol);
_fromCol = fromCol;
_fromRow = fromRow;
_toCol = toCol;
_toRow = toRow;
Address = GetAddress(_fromRow, _fromCol, _toRow, _toCol);
return this;
}
}
private static void ValidateRowCol(int row, int col) {
if (row < 1 || row > ExcelPackage.MaxRows) {
throw (new ArgumentException("Row out of range"));
}
if (col < 1 || col > ExcelPackage.MaxColumns) {
throw (new ArgumentException("Column out of range"));
}
}
}