Beispiel #1
0
 private object EvaluateFunction(CalcFunction func, object[] args, CalcEvaluatorContext context, bool acceptsArray, bool acceptsReference, int offsetRow, int offsetColumn)
 {
     try
     {
         CalcEvaluatorContext context2 = ((offsetRow != 0) && (offsetColumn != 0)) ? ((context != null) ? context.Offset(offsetRow, offsetColumn) : null) : context;
         object obj2 = func.IsContextSensitive ? func.Evaluate(args, context2) : func.Evaluate(args);
         if (obj2 is CalcReference)
         {
             if (context2 != null)
             {
                 if (context2.ArrayFormulaMode)
                 {
                     if (context.ExpandArrayToMultiCall)
                     {
                         obj2 = CalcHelper.GetArrayValue(CalcConvert.ToArray(obj2), offsetRow, offsetColumn) ?? ((int)0);
                     }
                 }
                 else if (!acceptsReference)
                 {
                     obj2 = this.ExtractValueFromReference(obj2 as CalcReference, context2.Row, context2.Column) ?? ((int)0);
                 }
             }
         }
         else if (obj2 is CalcArray)
         {
             if (context == null)
             {
                 obj2 = CalcHelper.GetArrayValue(obj2 as CalcArray, offsetRow, offsetColumn);
             }
             else if (context.ArrayFormulaMode)
             {
                 if (context.ExpandArrayToMultiCall)
                 {
                     obj2 = CalcHelper.GetArrayValue(obj2 as CalcArray, offsetRow, offsetColumn);
                 }
             }
             else if (!acceptsArray && context.ExpandArrayToMultiCall)
             {
                 obj2 = CalcHelper.GetArrayValue(obj2 as CalcArray, offsetRow, offsetColumn);
             }
         }
         return(obj2);
     }
     catch (InvalidCastException)
     {
         return(CalcErrors.Value);
     }
 }