本帖最后由 Richard.Ma 于 2020-6-24 14:26 编辑
我不确定你说的最大偏差怎么计算,这里给出的是求一个区域内小于固定数值的单元格求和
可以参考一下
- class CountIfLessThanFunction : GrapeCity.CalcEngine.Function
- {
- public CountIfLessThanFunction() : base("COUNTIFLESSTHAN", 2, 2, GrapeCity.CalcEngine.FunctionAttributes.Number) { }
- protected override void Evaluate(IArguments arguments, IValue result)
- {
- IValue range = arguments[0];
- //确认第一个参数是否是引用类型,不是的话返回错误值类型
- if (range.ValueType != GrapeCity.CalcEngine.ValueType.AdjustableReference)
- {
- arguments.EvaluationContext.Error = CalcError.Value;
- result.SetValue(CalcError.Value);
- }
- else
- {
- IEvaluationContext evaluationContext = arguments.EvaluationContext;
- //获取第二个参数
- double criteria = arguments[1].GetNumber(evaluationContext);
-
- IReferenceSource referenceSource = range.GetReferenceSource(evaluationContext);
- //获取第一个参数,这个即是你目前需要的一个范围,调用的时候需要写"$C$4:$C$9"这种
- RangeReference rangeRef = range.GetReference(evaluationContext, 0);
- double sum = 0;
- //获取范围,循环可以获取单元格的值,进行逻辑运算
- for (int c = rangeRef.Column; c <= rangeRef.Column2; c++)
- {
- for (int r = rangeRef.Row; r <= rangeRef.Row2; r++)
- {
- referenceSource.GetValue(evaluationContext, r, c, result);
- double cellValue = result.GetNumber(evaluationContext);
- if (cellValue < criteria)
- {
- sum+= cellValue;
- }
- }
- }
- result.SetValue(evaluationContext, sum);
- }
- }
- }
复制代码
下面就是实际调用的代码
- fpSpread2.AddCustomFunction(new CountIfLessThanFunction());
- fpSpread2.ActiveSheet.Cells[12,3].Formula = "COUNTIFLESSTHAN($C$4:$C$9,4)";
复制代码
|