找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-12-31 12:25  /   查看:2258  /  回复:0
了解SpreadJS自定义公式的同学们应该知道,在SpreadJS的自定义公式中一个 acceptsReference 的设置,设置了之后,自定义公式的参数中就可以支持引用当做参数传入。并且解析的时候会返回一个对象包含了引用的相关位置。由此我们可以支持诸如:A1:A10, B:B 之类的写法。
那么有些同学就要问了,我的自定义公式中可能既存在A1:A10这样的引用参数,又存在1,2,3这样的值当做参数传入,这个时候我的计算逻辑该如何解析呢?
image.png43656615.png
别急,我们下面就会告诉你答案。
首先,我们的解题思路就是利用JS对于类型的判断,来进行引用参数与值参数的区分。如果是引用参数那么回调里的参数必定是一个object类型。如果是值参数可能根据值的不同会有不同的类型,例如number,string等,但是不可能是一个object。所以突破口就在这里。
image.png549804992.png
于是我们利用对参数进行typeof的判断,判断是否是一个object来进行区分,类似下面代码:
  1. for(var k=1;k<arguments.length;k++){
  2.                                 if(typeof(arguments[k]) == 'object'){
  3.                                         var currentSheet = arguments[k].getSource().getSheet();
  4.                                         var row = arguments[k].getRow();
  5.                                         var col = arguments[k].getColumn();
  6.                                         var rowCount = arguments[k].getRowCount();
  7.                                         var colCount = arguments[k].getColumnCount();
  8.                                         for(var i=row;i<row+rowCount;i++){
  9.                                                 for(var j=col;j<col+colCount;j++){
  10.                                                         var value = currentSheet.getValue(i,j);
  11.                                                         sum += value;
  12.                                                 }
  13.                                         }
  14.                                 }else{
  15.                                         sum+=arguments[k]
  16.                                 }
  17.                           
  18.                         }
复制代码

实例代码中完成了对所有参数的判断并累加求和。完整的实例可以参考附件demo。

利用上述方法,我们就能实现“我全都要”了。


自定义公式接受公式引用和一般传值.html

4.19 KB, 下载次数: 68

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部