| using System; |
| using System.Collections.Generic; |
| using System.Linq; |
| |
| namespace AppsheetEpplus; |
| |
| public class Index : ExcelFunction { |
| public override CompileResult Execute( |
| IEnumerable<FunctionArgument> arguments, |
| ParsingContext context) { |
| ValidateArguments(arguments, 2); |
| var arg1 = arguments.ElementAt(0); |
| var args = arg1.Value as IEnumerable<FunctionArgument>; |
| var crf = new CompileResultFactory(); |
| if (args != null) { |
| var index = ArgToInt(arguments, 1); |
| if (index > args.Count()) { |
| throw new ExcelErrorValueException(eErrorType.Ref); |
| } |
| var candidate = args.ElementAt(index - 1); |
| //Commented JK-Can be any data type |
| //if (!IsNumber(candidate.Value)) |
| //{ |
| // throw new ExcelErrorValueException(eErrorType.Value); |
| //} |
| //return CreateResult(ConvertUtil.GetValueDouble(candidate.Value), DataType.Decimal); |
| return crf.Create(candidate.Value); |
| } |
| if (arg1.IsExcelRange) { |
| var row = ArgToInt(arguments, 1); |
| var col = arguments.Count() > 2 ? ArgToInt(arguments, 2) : 1; |
| var ri = arg1.ValueAsRangeInfo; |
| if (row > ri.Address._toRow - ri.Address._fromRow + 1 |
| || col > ri.Address._toCol - ri.Address._fromCol + 1) { |
| ThrowExcelErrorValueException(eErrorType.Ref); |
| } |
| var candidate = ri.GetOffset(row - 1, col - 1); |
| //Commented JK-Can be any data type |
| //if (!IsNumber(candidate.Value)) |
| //{ |
| // throw new ExcelErrorValueException(eErrorType.Value); |
| //} |
| return crf.Create(candidate); |
| } |
| throw new NotImplementedException(); |
| } |
| } |