示例#1
0
        /**
         * @return the number of evaluated cells in the range that match the specified criteria
         */
        public static int CountMatchingCellsInArea(ThreeDEval areaEval, IMatchPredicate criteriaPredicate)
        {
            int result = 0;

            for (int sIx = areaEval.FirstSheetIndex; sIx <= areaEval.LastSheetIndex; sIx++)
            {
                int height = areaEval.Height;
                int width  = areaEval.Width;
                for (int rrIx = 0; rrIx < height; rrIx++)
                {
                    for (int rcIx = 0; rcIx < width; rcIx++)
                    {
                        ValueEval ve = areaEval.GetValue(sIx, rrIx, rcIx);

                        if (criteriaPredicate is I_MatchAreaPredicate)
                        {
                            I_MatchAreaPredicate areaPredicate = (I_MatchAreaPredicate)criteriaPredicate;
                            if (!areaPredicate.Matches(areaEval, rrIx, rcIx))
                            {
                                continue;
                            }
                        }

                        if (criteriaPredicate.Matches(ve))
                        {
                            result++;
                        }
                    }
                }
            }
            return(result);
        }
示例#2
0
 /**
  * Collects values from a single argument
  */
 private void CollectValues(ValueEval operand, DoubleList temp)
 {
     if (operand is ThreeDEval)
     {
         ThreeDEval ae = (ThreeDEval)operand;
         for (int sIx = ae.FirstSheetIndex; sIx <= ae.LastSheetIndex; sIx++)
         {
             int width  = ae.Width;
             int height = ae.Height;
             for (int rrIx = 0; rrIx < height; rrIx++)
             {
                 for (int rcIx = 0; rcIx < width; rcIx++)
                 {
                     ValueEval ve = ae.GetValue(sIx, rrIx, rcIx);
                     if (!IsSubtotalCounted && ae.IsSubTotal(rrIx, rcIx))
                     {
                         continue;
                     }
                     CollectValue(ve, true, temp);
                 }
             }
         }
         return;
     }
     if (operand is TwoDEval)
     {
         TwoDEval ae     = (TwoDEval)operand;
         int      width  = ae.Width;
         int      height = ae.Height;
         for (int rrIx = 0; rrIx < height; rrIx++)
         {
             for (int rcIx = 0; rcIx < width; rcIx++)
             {
                 ValueEval ve = ae.GetValue(rrIx, rcIx);
                 if (!IsSubtotalCounted && ae.IsSubTotal(rrIx, rcIx))
                 {
                     continue;
                 }
                 CollectValue(ve, true, temp);
             }
         }
         return;
     }
     if (operand is RefEval)
     {
         RefEval re = (RefEval)operand;
         for (int sIx = re.FirstSheetIndex; sIx <= re.LastSheetIndex; sIx++)
         {
             CollectValue(re.GetInnerValueEval(sIx), true, temp);
         }
         return;
     }
     CollectValue((ValueEval)operand, false, temp);
 }
示例#3
0
        /**
     * @return the number of evaluated cells in the range that match the specified criteria
     */
        public static int CountMatchingCellsInArea(ThreeDEval areaEval, IMatchPredicate criteriaPredicate)
        {
            int result = 0;
            for (int sIx = areaEval.FirstSheetIndex; sIx <= areaEval.LastSheetIndex; sIx++)
            {
                int height = areaEval.Height;
                int width = areaEval.Width;
                for (int rrIx = 0; rrIx < height; rrIx++)
                {
                    for (int rcIx = 0; rcIx < width; rcIx++)
                    {
                        ValueEval ve = areaEval.GetValue(sIx, rrIx, rcIx);

                        if (criteriaPredicate is I_MatchAreaPredicate)
                        {
                            I_MatchAreaPredicate areaPredicate = (I_MatchAreaPredicate)criteriaPredicate;
                            if (!areaPredicate.Matches(areaEval, rrIx, rcIx)) continue;
                        }

                        if (criteriaPredicate.Matches(ve))
                        {
                            result++;
                        }
                    }
                }
            }
            return result;
        }