diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a4259de..5aac98d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -6,8 +6,8 @@ pool: vmImage: 'windows-latest' variables: - major: 0 - minor: 9 + major: 1 + minor: 1 revision: 0 solution: '**/*.sln' buildPlatform: 'Any CPU' diff --git a/src/WldMr.Excel.Core/ArrayFunction.fs b/src/WldMr.Excel.Core/ArrayFunction.fs index ee85952..6ba8e81 100644 --- a/src/WldMr.Excel.Core/ArrayFunction.fs +++ b/src/WldMr.Excel.Core/ArrayFunction.fs @@ -127,7 +127,7 @@ module ArrayFunction = member internal uaa.evalCached f subEval i j = result { - let! fp = subEval (f) i j + let! fp = subEval f i j let! v = uaa.cachedConversion i j return fp v } @@ -256,6 +256,62 @@ module ArrayFunction = member uaa.EvalArrayIndexedFunction f = uaa.returnArray2dFromArrays (uaa.Eval f) false member uaa.EvalArrayIndexedFunctionHorizontal f = uaa.returnArray2dFromArrays (uaa.Eval f) true + member uaa.Add(name: string, c: xlObj -> _, value: xlObj[,]) = + ArrayFunctionDefinition<_, _, _, _, _, _, _, _, _, _>(name, value, uaa, c) + + and ArrayFunctionDefinition<'T1, 'T2, 'T3, 'T4, 'T5, 'T6, 'T7, 'T8, 'T9, 'T10>(name: string, value: xlObj[,], rest: ArrayFunctionDefinition<'T2, 'T3, 'T4, 'T5, 'T6, 'T7, 'T8, 'T9, 'T10>, conversion: xlObj -> Result<'T1, string> ) = + inherit UdfArrayArgWithValue<'T1>(name, value, rest :> UdfArrayArgBase |> Some, conversion) + + member internal uaa.Eval f i j = uaa.evalCached f rest.Eval i j + member uaa.EvalFunction f = uaa.returnArray2d (uaa.Eval (fun _ _ -> f)) + member uaa.EvalArrayFunction f = uaa.returnArray2dFromArrays (uaa.Eval (fun _ _ -> f)) false + member uaa.EvalArrayFunctionHorizontal f = uaa.returnArray2dFromArrays (uaa.Eval (fun _ _ -> f)) true + member uaa.EvalIndexedFunction f = uaa.returnArray2d (uaa.Eval f) + member uaa.EvalArrayIndexedFunction f = uaa.returnArray2dFromArrays (uaa.Eval f) false + member uaa.EvalArrayIndexedFunctionHorizontal f = uaa.returnArray2dFromArrays (uaa.Eval f) true + + member uaa.Add(name: string, c: xlObj -> _, value: xlObj[,]) = + ArrayFunctionDefinition<_, _, _, _, _, _, _, _, _, _, _>(name, value, uaa, c) + + and ArrayFunctionDefinition<'T1, 'T2, 'T3, 'T4, 'T5, 'T6, 'T7, 'T8, 'T9, 'T10, 'T11>(name: string, value: xlObj[,], rest: ArrayFunctionDefinition<'T2, 'T3, 'T4, 'T5, 'T6, 'T7, 'T8, 'T9, 'T10, 'T11>, conversion: xlObj -> Result<'T1, string> ) = + inherit UdfArrayArgWithValue<'T1>(name, value, rest :> UdfArrayArgBase |> Some, conversion) + + member internal uaa.Eval f i j = uaa.evalCached f rest.Eval i j + member uaa.EvalFunction f = uaa.returnArray2d (uaa.Eval (fun _ _ -> f)) + member uaa.EvalArrayFunction f = uaa.returnArray2dFromArrays (uaa.Eval (fun _ _ -> f)) false + member uaa.EvalArrayFunctionHorizontal f = uaa.returnArray2dFromArrays (uaa.Eval (fun _ _ -> f)) true + member uaa.EvalIndexedFunction f = uaa.returnArray2d (uaa.Eval f) + member uaa.EvalArrayIndexedFunction f = uaa.returnArray2dFromArrays (uaa.Eval f) false + member uaa.EvalArrayIndexedFunctionHorizontal f = uaa.returnArray2dFromArrays (uaa.Eval f) true + + member uaa.Add(name: string, c: xlObj -> _, value: xlObj[,]) = + ArrayFunctionDefinition<_, _, _, _, _, _, _, _, _, _, _, _>(name, value, uaa, c) + + and ArrayFunctionDefinition<'T1, 'T2, 'T3, 'T4, 'T5, 'T6, 'T7, 'T8, 'T9, 'T10, 'T11, 'T12>(name: string, value: xlObj[,], rest: ArrayFunctionDefinition<'T2, 'T3, 'T4, 'T5, 'T6, 'T7, 'T8, 'T9, 'T10, 'T11, 'T12>, conversion: xlObj -> Result<'T1, string> ) = + inherit UdfArrayArgWithValue<'T1>(name, value, rest :> UdfArrayArgBase |> Some, conversion) + + member internal uaa.Eval f i j = uaa.evalCached f rest.Eval i j + member uaa.EvalFunction f = uaa.returnArray2d (uaa.Eval (fun _ _ -> f)) + member uaa.EvalArrayFunction f = uaa.returnArray2dFromArrays (uaa.Eval (fun _ _ -> f)) false + member uaa.EvalArrayFunctionHorizontal f = uaa.returnArray2dFromArrays (uaa.Eval (fun _ _ -> f)) true + member uaa.EvalIndexedFunction f = uaa.returnArray2d (uaa.Eval f) + member uaa.EvalArrayIndexedFunction f = uaa.returnArray2dFromArrays (uaa.Eval f) false + member uaa.EvalArrayIndexedFunctionHorizontal f = uaa.returnArray2dFromArrays (uaa.Eval f) true + + member uaa.Add(name: string, c: xlObj -> _, value: xlObj[,]) = + ArrayFunctionDefinition<_, _, _, _, _, _, _, _, _, _, _, _, _>(name, value, uaa, c) + + and ArrayFunctionDefinition<'T1, 'T2, 'T3, 'T4, 'T5, 'T6, 'T7, 'T8, 'T9, 'T10, 'T11, 'T12, 'T13>(name: string, value: xlObj[,], rest: ArrayFunctionDefinition<'T2, 'T3, 'T4, 'T5, 'T6, 'T7, 'T8, 'T9, 'T10, 'T11, 'T12, 'T13>, conversion: xlObj -> Result<'T1, string> ) = + inherit UdfArrayArgWithValue<'T1>(name, value, rest :> UdfArrayArgBase |> Some, conversion) + + member internal uaa.Eval f i j = uaa.evalCached f rest.Eval i j + member uaa.EvalFunction f = uaa.returnArray2d (uaa.Eval (fun _ _ -> f)) + member uaa.EvalArrayFunction f = uaa.returnArray2dFromArrays (uaa.Eval (fun _ _ -> f)) false + member uaa.EvalArrayFunctionHorizontal f = uaa.returnArray2dFromArrays (uaa.Eval (fun _ _ -> f)) true + member uaa.EvalIndexedFunction f = uaa.returnArray2d (uaa.Eval f) + member uaa.EvalArrayIndexedFunction f = uaa.returnArray2dFromArrays (uaa.Eval f) false + member uaa.EvalArrayIndexedFunctionHorizontal f = uaa.returnArray2dFromArrays (uaa.Eval f) true + type ArrayFunctionBuilder() = static member Add(name: string, c: xlObj -> _, value: xlObj[,]) = ArrayFunction.ArrayFunctionDefinition<_>(name, value, None, c) diff --git a/src/WldMr.Excel.Functions/xlFormat.fs b/src/WldMr.Excel.Functions/xlFormat.fs index a80f8e1..7882a06 100644 --- a/src/WldMr.Excel.Functions/xlFormat.fs +++ b/src/WldMr.Excel.Functions/xlFormat.fs @@ -22,7 +22,9 @@ let xlFormatA o1: xlObj[,], t1: xlObj[,], o2: xlObj[,], t2: xlObj[,], o3: xlObj[,], t3: xlObj[,], - o4: xlObj[,], t4: xlObj[,] + o4: xlObj[,], t4: xlObj[,], + o5: xlObj[,], t5: xlObj[,], + o6: xlObj[,], t6: xlObj[,] ): xlObj[,] = let convertXlObj (o: xlObj) (t: xlObj) = match o, t with @@ -51,11 +53,13 @@ let xlFormatA (o2: xlObj) (t2: xlObj) (o3: xlObj) (t3: xlObj) (o4: xlObj) (t4: xlObj) + (o5: xlObj) (t5: xlObj) + (o6: xlObj) (t6: xlObj) = result { let! args = - ([ o1; o2; o3; o4], - [ t1; t2; t3; t4]) + ([ o1; o2; o3; o4; o5; o6], + [ t1; t2; t3; t4; t5; t6]) ||> List.map2 convertXlObj |> List.sequenceResultM @@ -68,5 +72,7 @@ let xlFormatA .Add("o2", Ok, o2).Add("t2", Ok, t2) .Add("o3", Ok, o3).Add("t3", Ok, t3) .Add("o4", Ok, o4).Add("t4", Ok, t4) + .Add("o5", Ok, o5).Add("t5", Ok, t5) + .Add("o6", Ok, o6).Add("t6", Ok, t6) .EvalFunction scalarF |> FunctionCall.eval diff --git a/src/WldMr.Excel.Functions/xlString.fs b/src/WldMr.Excel.Functions/xlString.fs index b1f701a..5d1160c 100644 --- a/src/WldMr.Excel.Functions/xlString.fs +++ b/src/WldMr.Excel.Functions/xlString.fs @@ -38,7 +38,7 @@ let regexFilter regex ignoreCase input: Result = "This function also operates on arrays\r\n" + "Returns FALSE for any non text input\r\n" )>] -let xlStringStartsWith +let xlStartsWith ( [] input: xlObj[,], @@ -62,6 +62,27 @@ let xlStringStartsWith } |> XlObjRange.ofResult +[] +let xlStringStartsWith ( + [] + input: xlObj[,], + [] + prefix: string, + [] + ignoreCase: xlObj, + [] + useRegex: xlObj + ) = + xlStartsWith(input, prefix, ignoreCase, useRegex) + + [] -let xlStringEndsWith +let xlEndsWith ( [] input: xlObj[,], @@ -93,6 +114,28 @@ let xlStringEndsWith |> stringFilter (fun s -> s.EndsWith(suffix, ic, System.Globalization.CultureInfo.InvariantCulture)) } |> XlObjRange.ofResult +[] +let xlStringEndsWith + ( + [] + input: xlObj[,], + [] + suffix: string, + [] + ignoreCase: xlObj, + [] + useRegex: xlObj + ) = + xlEndsWith(input, suffix, ignoreCase, useRegex) + [