private bool HaveTwoRanges(IEnumerable <FunctionArgument> arguments) { if (arguments.Count() == 2) { return(false); } return(ExcelAddressUtil.IsValidAddress(arguments.ElementAt(2).Value.ToString())); }
/// <summary> /// Calculates the row of either the given range or the column that the function is executed in. /// </summary> /// <param name="arguments">The collection of arguments to be used to calculate the row value.</param> /// <param name="context">The context of the function when parsed.</param> /// <returns>Returns a <see cref="CompileResult"/> containing either the resulting row or an error value.</returns> public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context) { var rangeAddress = arguments.Count() == 0 ? null : arguments.ElementAt(0).ValueAsRangeInfo?.Address; if (arguments == null || arguments.Count() == 0 || rangeAddress == null) { return(CreateResult(context.Scopes.Current.Address.FromRow, DataType.Integer)); } if (!ExcelAddressUtil.IsValidAddress(rangeAddress.Address)) { return(new CompileResult(eErrorType.Value)); } return(CreateResult(rangeAddress._fromRow, DataType.Integer)); }
public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context) { if (arguments == null || arguments.Count() == 0) { return(CreateResult(context.Scopes.Current.Address.FromCol, DataType.Integer)); } var rangeAddress = ArgToAddress(arguments, 0, context); if (!ExcelAddressUtil.IsValidAddress(rangeAddress)) { throw new ArgumentException("An invalid argument was supplied"); } var factory = new RangeAddressFactory(context.ExcelDataProvider); var address = factory.Create(rangeAddress); return(CreateResult(address.FromCol, DataType.Integer)); }
public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context) { ValidateArguments(arguments, 1); var r = arguments.ElementAt(0).ValueAsRangeInfo; if (r != null) { return(CreateResult(r.Address._toRow - r.Address._fromRow + 1, DataType.Integer)); } else { var range = ArgToAddress(arguments, 0, context); if (ExcelAddressUtil.IsValidAddress(range)) { var factory = new RangeAddressFactory(context.ExcelDataProvider); var address = factory.Create(range); return(CreateResult(address.ToRow - address.FromRow + 1, DataType.Integer)); } } throw new ArgumentException("Invalid range supplied"); }
public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context) { if (arguments == null || arguments.Count() == 0) { return(CreateResult(context.Scopes.Current.Address.FromRow, DataType.Integer)); } var r = arguments.ElementAt(0).ValueAsRangeInfo; if (r != null) { return(CreateResult(r.Address._fromRow, DataType.Integer)); } else { var rangeAddress = ArgToString(arguments, 0); if (ExcelAddressUtil.IsValidAddress(rangeAddress)) { var factory = new RangeAddressFactory(context.ExcelDataProvider); var address = factory.Create(rangeAddress); return(CreateResult(address.FromRow, DataType.Integer)); } } throw new ArgumentException("An invalid argument was supplied"); }
/// <summary> /// Executes the function with the specified <paramref name="arguments"/> in the specified <paramref name="context"/>. /// </summary> /// <param name="arguments">The arguments with which to evaluate the function.</param> /// <param name="context">The context in which to evaluate the function.</param> /// <returns>The <see cref="CompileResult"/>.</returns> public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context) { if (this.ArgumentsAreValid(arguments, 1, out eErrorType argumentError) == false) { return(new CompileResult(argumentError)); } var r = arguments.ElementAt(0).ValueAsRangeInfo; if (r != null) { return(CreateResult(r.Address._toCol - r.Address._fromCol + 1, DataType.Integer)); } else { var range = ArgToString(arguments, 0); if (ExcelAddressUtil.IsValidAddress(range)) { var factory = new RangeAddressFactory(context.ExcelDataProvider); var address = factory.Create(range); return(CreateResult(address.ToCol - address.FromCol + 1, DataType.Integer)); } } throw new ArgumentException("Invalid range supplied"); }