| using System; | 
 | using System.Collections.Generic; | 
 | using System.Linq; | 
 | using System.Text; | 
 | using OfficeOpenXml.FormulaParsing.Excel.Functions; | 
 | using OfficeOpenXml.FormulaParsing.Exceptions; | 
 |  | 
 | namespace OfficeOpenXml.FormulaParsing.ExpressionGraph.FunctionCompilers | 
 | { | 
 |     public class IfNaFunctionCompiler : FunctionCompiler | 
 |     { | 
 |         public IfNaFunctionCompiler(ExcelFunction function) | 
 |             :base(function) | 
 |         { | 
 |              | 
 |         } | 
 |  | 
 |         public override CompileResult Compile(IEnumerable<Expression> children, ParsingContext context) | 
 |         { | 
 |             if (children.Count() != 2) throw new ExcelErrorValueException(eErrorType.Value); | 
 |             var args = new List<FunctionArgument>(); | 
 |             Function.BeforeInvoke(context); | 
 |             var firstChild = children.First(); | 
 |             var lastChild = children.ElementAt(1); | 
 |             try | 
 |             { | 
 |                 var result = firstChild.Compile(); | 
 |                 if (result.DataType == DataType.ExcelError && (Equals(result.Result, | 
 |                     ExcelErrorValue.Create(eErrorType.NA)))) | 
 |                 { | 
 |                     args.Add(new FunctionArgument(lastChild.Compile().Result)); | 
 |                 } | 
 |                 else | 
 |                 { | 
 |                     args.Add(new FunctionArgument(result.Result)); | 
 |                 } | 
 |  | 
 |             } | 
 |             catch (ExcelErrorValueException ex) | 
 |             { | 
 |                 args.Add(new FunctionArgument(lastChild.Compile().Result)); | 
 |             } | 
 |             return Function.Execute(args, context); | 
 |         } | 
 |     } | 
 | } |