找回密码
 立即注册

QQ登录

只需一步,快速开始

bingdaoice
中级会员   /  发表于:2020-6-22 08:36:20
10#
好的,非常感谢。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-6-22 12:11:44
11#
您好,如果您的公式里参数是一个类似A1:B3的区域,在实自定义公式的时候,重写AcceptsReference方法,第几个参数是range就retrun true,这样在Evaluate中的argument就是一个引用对象了,然后根据这个对象去获取多个单元格的值。


https://www.grapecity.com/spread ... ceptsReference.html
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2020-6-22 12:31:38
12#
dexteryao 发表于 2020-6-22 12:11
您好,如果您的公式里参数是一个类似A1:B3的区域,在实自定义公式的时候,重写AcceptsReference方法,第几 ...

你好。能不能给个详细点的例子。你说的这个我没明白需要怎么去操作。
不好意思。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-6-22 13:03:09
13#
请参考
  1. public override  bool AcceptsReference(int i)
  2.     {
  3.       return i == 0;
  4.     }
  5.     public override object Evaluate(object[] args)
  6.     {
  7.       CalcReference range = args[0] as CalcReference;
  8.       double criteria = CalcConvert.ToDouble(args[1]);
  9.       double count = 0.0;
  10.       if (range == null)
  11.         return CalcError.Value;
  12.       for (int i = range.Row; i < range.Row + range.RowCount; i++)
  13.       {
  14.         for (int j = range.Column; j < range.Column + range.ColumnCount; j++)
  15.         {
  16.           double cellValue = CalcConvert.ToDouble(range.GetValue(i, j));
  17.           if (cellValue < criteria)
  18.             count++;
  19.         }
  20.       }
  21.       return count;
  22.     }
  23.   }
复制代码
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2020-6-22 14:34:16
14#
本帖最后由 bingdaoice 于 2020-6-22 14:35 编辑

谢谢版主的回答:但是我还没有弄明白怎么去添加这个公式,以下图是我的方式,不知道哪里错了。添加不了 image.png114837035.png


另外,请帮我看一下以下例子,我怎么样写出来才能把这个公式添加进去并计算出来?
image.png762228393.png
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-6-22 17:02:35
15#
抱歉我给您发的是老版本的写法,新版参考
https://www.grapecity.com/spread ... light=singlecell%2C

参考第二个代码事例,这个是完整的。
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2020-6-22 17:11:00
16#
https://www.grapecity.com/spread ... light=singlecell%2C
下面的好像有涉及多的例子,但是看不懂。
也不知道怎么用。请问有具体一点的例子吗?
我想写一个简单的公式:比如最大偏差,
请问这个公式的整个过程,以及把这个公式添加进去并计算出来?
请给一个完整的例子可以吗?感谢版主。
image.png242484435.png
回复 使用道具 举报
bingdaoice
中级会员   /  发表于:2020-6-24 11:36:35
18#
你好,Richard.Ma版主,看了多天https://www.grapecity.com/spreadnet/docs/v13/online-win/spwin-formulacustomfunc.html?highlight=singlecell%2C
里面的公式例子,依然不明白。
“    以及你上面写的:<blockquote>class CountIfLessThanFunction : GrapeCity.CalcEngine.Function
下面就是实际调用的代码
            fpSpread2.AddCustomFunction(new CountIfLessThanFunction());
            fpSpread2.ActiveSheet.Cells[12,3].Formula = "COUNTIFLESSTHAN($C$4C$9,4)";  ”

均不能成功应用。
能给个详细可应用的实际例子吗:
例如1: image.png777878417.png 我想取得38-43行数据之和后,再除以44行,然后加45行、46行之和后,再除以数据行数(9)。(其中数据行数为不固定,有可能10多行,也有可能3行)
我把这个过程自己做一个公式。
直接就取得结果。

例如2: 同样数据如上图,想定义的公式内容为:保留2位小数,4舍6入,5看5后面的读数,奇数进位,偶数舍去。


回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-6-24 14:27:04
19#
本帖最后由 Richard.Ma 于 2020-6-24 14:37 编辑

抱歉我之前上传的代码有点问题,已经编辑修改,并做了注释,应该比较清晰了
你的第二个因为只引用单个单元格应该是比较简单的,你可以自己写

第一个的话,我理解你的意思是需要将除最后三行外的数据先求和,然后除以倒数第三行,然后再加上最后两行,再除以行数,这个逻辑通过循环一遍也没有问题,循环里面加一点判断就行了
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部