/******************************************************************************* * 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; using System.Collections.Generic; using System.Text; using OfficeOpenXml.Style; using System.Data; namespace OfficeOpenXml { /// /// A range of cells. /// public class ExcelRange : ExcelRangeBase { #region "Constructors" internal ExcelRange(ExcelWorksheet sheet) : base(sheet) { } 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; } #endregion #region "Indexers" /// /// Access the range using an address /// /// The address /// A range object public ExcelRange this[string Address] { get { if (_worksheet.Names.ContainsKey(Address)) { if (_worksheet.Names[Address].IsName) { return null; } else { base.Address = _worksheet.Names[Address].Address; } } else { base.Address = Address; } return this; } } private ExcelRange GetTableAddess(ExcelWorksheet _worksheet, string address) { int ixStart = address.IndexOf('['); if (ixStart == 0) //External Address { int ixEnd = address.IndexOf(']',ixStart+1); if (ixStart >= 0 & ixEnd >= 0) { var external = address.Substring(ixStart + 1, ixEnd - 1); //if (Worksheet.Workbook._externalReferences.Count < external) //{ //foreach(var //} } } return null; } /// /// Access a single cell /// /// The row /// The column /// A range object public ExcelRange this[int Row, int Col] { get { ValidateRowCol(Row, Col); _fromCol = Col; _fromRow = Row; _toCol = Col; _toRow = Row; base.Address = GetAddress(_fromRow, _fromCol); return this; } } /// /// Access a range of cells /// /// Start row /// Start column /// End Row /// End Column /// 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; base.Address = GetAddress(_fromRow, _fromCol, _toRow, _toCol); return this; } } #endregion 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")); } } } }