|  | using OfficeOpenXml.FormulaParsing.LexicalAnalysis; | 
|  | using System; | 
|  | using System.Collections.Generic; | 
|  | using System.Linq; | 
|  | using System.Text; | 
|  |  | 
|  | namespace OfficeOpenXml.FormulaParsing | 
|  | { | 
|  | /// <summary> | 
|  | /// This class should be implemented to be able to deliver excel data | 
|  | /// to the formula parser. | 
|  | /// </summary> | 
|  | public abstract class ExcelDataProvider : IDisposable | 
|  | { | 
|  | public interface ICellInfo : IEnumerator<ICellInfo>, IEnumerable<ICellInfo> | 
|  | { | 
|  | string Address { get; } | 
|  | int Row { get; } | 
|  | int Column { get; } | 
|  | string Formula { get;  } | 
|  | object Value { get; } | 
|  | double ValueDouble { get; } | 
|  | double ValueDoubleLogical { get; } | 
|  | bool IsHiddenRow { get; } | 
|  | bool IsEmpty { get; } | 
|  | bool IsMulti { get; } | 
|  | bool NextCell(); | 
|  | IList<Token> Tokens { get; } | 
|  | int GetNCells(); | 
|  | } | 
|  | public interface INameInfo | 
|  | { | 
|  | ulong Id { get; set; } | 
|  | string Name { get; set; } | 
|  | string Formula { get; set; } | 
|  | IList<Token> Tokens { get; } | 
|  | object Value { get; set; } | 
|  | } | 
|  | /// <summary> | 
|  | /// Returns the names of all worksheet names | 
|  | /// </summary> | 
|  | /// <returns></returns> | 
|  | public abstract ExcelNamedRangeCollection GetWorksheetNames(); | 
|  | /// <summary> | 
|  | /// Returns all defined names in a workbook | 
|  | /// </summary> | 
|  | /// <returns></returns> | 
|  | public abstract ExcelNamedRangeCollection GetWorkbookNameValues(); | 
|  | /// <summary> | 
|  | /// Returns values from the required range. | 
|  | /// </summary> | 
|  | /// <param name="address">An Excel address</param> | 
|  | /// <returns>values from the required cells</returns> | 
|  | public abstract ICellInfo GetRange(string worksheetName, int row, int column, string address); | 
|  | public abstract INameInfo GetName(string worksheet, string name); | 
|  |  | 
|  | public abstract IEnumerable<object> GetRangeValues(string address); | 
|  |  | 
|  | public abstract string GetRangeFormula(string worksheetName, int row, int column); | 
|  | public abstract List<Token> GetRangeFormulaTokens(string worksheetName, int row, int column); | 
|  | public abstract bool IsRowHidden(string worksheetName, int row); | 
|  | ///// <summary> | 
|  | ///// Returns a single cell value | 
|  | ///// </summary> | 
|  | ///// <param name="address"></param> | 
|  | ///// <returns></returns> | 
|  | //public abstract object GetCellValue(int sheetID, string address); | 
|  |  | 
|  | /// <summary> | 
|  | /// Returns a single cell value | 
|  | /// </summary> | 
|  | /// <param name="row"></param> | 
|  | /// <param name="col"></param> | 
|  | /// <returns></returns> | 
|  | public abstract object GetCellValue(string sheetName, int row, int col); | 
|  |  | 
|  | ///// <summary> | 
|  | ///// Sets the value on the cell | 
|  | ///// </summary> | 
|  | ///// <param name="address"></param> | 
|  | ///// <param name="value"></param> | 
|  | //public abstract void SetCellValue(string address, object value); | 
|  |  | 
|  | /// <summary> | 
|  | /// Use this method to free unmanaged resources. | 
|  | /// </summary> | 
|  | public abstract void Dispose(); | 
|  |  | 
|  | /// <summary> | 
|  | /// Max number of columns in a worksheet that the Excel data provider can handle. | 
|  | /// </summary> | 
|  | public abstract int ExcelMaxColumns { get; } | 
|  |  | 
|  | /// <summary> | 
|  | /// Max number of rows in a worksheet that the Excel data provider can handle | 
|  | /// </summary> | 
|  | public abstract int ExcelMaxRows { get; } | 
|  |  | 
|  | public abstract object GetRangeValue(string worksheetName, int row, int column); | 
|  | } | 
|  | } |