|  | 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); | 
|  | } | 
|  | } | 
|  | } |