| using System.Collections.Generic; | |
| using System.Linq; | |
| namespace AppsheetEpplus; | |
| public class IfErrorFunctionCompiler : FunctionCompiler { | |
| public IfErrorFunctionCompiler(ExcelFunction function) | |
| : base(function) { | |
| Require.That(function).Named("function").IsNotNull(); | |
| } | |
| 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) { | |
| args.Add(new(lastChild.Compile().Result)); | |
| } else { | |
| args.Add(new(result.Result)); | |
| } | |
| } catch (ExcelErrorValueException) { | |
| args.Add(new(lastChild.Compile().Result)); | |
| } | |
| return Function.Execute(args, context); | |
| } | |
| } |