コード例 #1
0
 private bool HaveTwoRanges(IEnumerable <FunctionArgument> arguments)
 {
     if (arguments.Count() == 2)
     {
         return(false);
     }
     return(ExcelAddressUtil.IsValidAddress(arguments.ElementAt(2).Value.ToString()));
 }
コード例 #2
0
        /// <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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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");
        }
コード例 #5
0
        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");
        }
コード例 #6
0
ファイル: Columns.cs プロジェクト: nxoxn/EPPlus
        /// <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");
        }