示例#1
0
        public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context)
        {
            ValidateArguments(arguments, 3);
            var dbAddress     = arguments.ElementAt(0).ValueAsRangeInfo.Address.Address;
            var field         = ArgToString(arguments, 1).ToLower(CultureInfo.InvariantCulture);
            var criteriaRange = arguments.ElementAt(2).ValueAsRangeInfo.Address.Address;

            var db       = new ExcelDatabase(context.ExcelDataProvider, dbAddress);
            var criteria = new ExcelDatabaseCriteria(context.ExcelDataProvider, criteriaRange);

            var    nHits  = 0;
            object retVal = null;

            while (db.HasMoreRows)
            {
                var dataRow = db.Read();
                if (!RowMatcher.IsMatch(dataRow, criteria))
                {
                    continue;
                }
                if (++nHits > 1)
                {
                    return(CreateResult(ExcelErrorValue.Values.Num, DataType.ExcelError));
                }
                retVal = dataRow[field];
            }
            return(new CompileResultFactory().Create(retVal));
        }
示例#2
0
文件: DcountA.cs 项目: nxoxn/EPPlus
        public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context)
        {
            if (this.ArgumentsAreValid(arguments, 2, out eErrorType argumentError) == false)
            {
                return(new CompileResult(argumentError));
            }
            var    dbAddress     = arguments.ElementAt(0).ValueAsRangeInfo.Address.Address;
            string field         = null;
            string criteriaRange = null;

            if (arguments.Count() == 2)
            {
                criteriaRange = arguments.ElementAt(1).ValueAsRangeInfo.Address.Address;
            }
            else
            {
                field         = ArgToString(arguments, 1).ToLower(CultureInfo.InvariantCulture);
                criteriaRange = arguments.ElementAt(2).ValueAsRangeInfo.Address.Address;
            }
            var db       = new ExcelDatabase(context.ExcelDataProvider, dbAddress);
            var criteria = new ExcelDatabaseCriteria(context.ExcelDataProvider, criteriaRange);

            var nHits = 0;

            while (db.HasMoreRows)
            {
                var dataRow = db.Read();
                if (RowMatcher.IsMatch(dataRow, criteria))
                {
                    // if a fieldname is supplied, count only this row if the value
                    // of the supplied field is not blank.
                    if (!string.IsNullOrEmpty(field))
                    {
                        var candidate = dataRow[field];
                        if (ShouldCount(candidate))
                        {
                            nHits++;
                        }
                    }
                    else
                    {
                        // no fieldname was supplied, always count matching row.
                        nHits++;
                    }
                }
            }
            return(CreateResult(nHits, DataType.Integer));
        }
示例#3
0
        public void IsMatchShouldMatchStrings1()
        {
            var data = new ExcelDatabaseRow();
            data["Crit1"] = "1";
            data["Crit2"] = 2;
            data["Crit3"] = 3;

            var crit = new Dictionary<ExcelDatabaseCriteriaField, object>();
            crit[new ExcelDatabaseCriteriaField("Crit1")] = "1";
            crit[new ExcelDatabaseCriteriaField("Crit3")] = 3;

            var matcher = new RowMatcher();

            var criteria = GetCriteria(crit);

            Assert.IsTrue(matcher.IsMatch(data, criteria));
        }
示例#4
0
        public void IsMatchShouldReturnFalseIfCriteriasDoesNotMatch()
        {
            var data = new ExcelDatabaseRow();
            data["Crit1"] = 1;
            data["Crit2"] = 2;
            data["Crit3"] = 3;

            var crit = new Dictionary<ExcelDatabaseCriteriaField, object>();
            crit[new ExcelDatabaseCriteriaField("Crit1")] = 1;
            crit[new ExcelDatabaseCriteriaField("Crit3")] = 4;

            var matcher = new RowMatcher();

            var criteria = GetCriteria(crit);

            Assert.IsFalse(matcher.IsMatch(data, criteria));
        }
示例#5
0
 public DatabaseFunction(RowMatcher rowMatcher)
 {
     RowMatcher = rowMatcher;
 }
示例#6
0
 public Dmax(RowMatcher rowMatcher)
     : base(rowMatcher)
 {
 }
示例#7
0
文件: DcountA.cs 项目: acinep/epplus
        public DcountA(RowMatcher rowMatcher)
            : base(rowMatcher)
        {

        }
示例#8
0
文件: Dmax.cs 项目: Eagle-Chan/KIS
        public Dmax(RowMatcher rowMatcher)
            : base(rowMatcher)
        {

        }
示例#9
0
 public DatabaseFunction(RowMatcher rowMatcher)
 {
     RowMatcher = rowMatcher;
 }
示例#10
0
文件: DSum.cs 项目: acinep/epplus
        public Dsum(RowMatcher rowMatcher)
            : base(rowMatcher)
        {

        }
示例#11
0
文件: Dmin.cs 项目: nxoxn/EPPlus
 public Dmin(RowMatcher rowMatcher)
     : base(rowMatcher)
 {
 }
示例#12
0
         public Daverage(RowMatcher rowMatcher)
            : base(rowMatcher)
        {

        }
示例#13
0
文件: Dget.cs 项目: Eagle-Chan/KIS
        public Dget(RowMatcher rowMatcher)
            : base(rowMatcher)
        {

        }
示例#14
0
文件: Dvar.cs 项目: Eagle-Chan/KIS
         public Dvar(RowMatcher rowMatcher)
            : base(rowMatcher)
        {

        }
示例#15
0
 public DcountA(RowMatcher rowMatcher)
     : base(rowMatcher)
 {
 }
示例#16
0
文件: DSum.cs 项目: nxoxn/EPPlus
 public Dsum(RowMatcher rowMatcher)
     : base(rowMatcher)
 {
 }
示例#17
0
文件: Dmin.cs 项目: Eagle-Chan/KIS
        public Dmin(RowMatcher rowMatcher)
            : base(rowMatcher)
        {

        }
示例#18
0
 public Dvar(RowMatcher rowMatcher)
     : base(rowMatcher)
 {
 }
示例#19
0
 public Dcount(RowMatcher rowMatcher)
 {
     _rowMatcher = rowMatcher;
 }
示例#20
0
 public Dget(RowMatcher rowMatcher)
     : base(rowMatcher)
 {
 }
示例#21
0
 public Daverage(RowMatcher rowMatcher)
     : base(rowMatcher)
 {
 }
示例#22
0
文件: Dcount.cs 项目: acinep/epplus
 public Dcount(RowMatcher rowMatcher)
 {
     _rowMatcher = rowMatcher;
 }