找回密码
 立即注册

QQ登录

只需一步,快速开始

jasonleeoffice

注册会员

20

主题

71

帖子

191

积分

注册会员

积分
191
jasonleeoffice
注册会员   /  发表于:2018-10-11 19:44  /   查看:13618  /  回复:29
image.png284902648.png

我想在这个自定义的函数里面获取到里面用到的单元格的所有的值
例如:=ROUND(SUM(A1:E1)-SUM(A2:E2))     那么我需要获取到A1到E1和A2到E2所有的值!如果函数复杂了,一样的道理,需要获取所有的值

29 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-10-12 10:38:15
沙发
您好,我贴一个Demo,里面有具体获取值的方法,

关键代码如下, Demo见附件:

  1. // 返回true表示允许参数含引用
  2.         CustomFunctionWithContext.prototype.acceptsReference = function () {
  3.             return true;
  4.         };
  5.         CustomFunctionWithContext.prototype.evaluate = function () {

  6.             var arg0 = arguments[0];
  7.             var arg1 = arguments[1];

  8.             var row = arg1.getRow();
  9.             var rowCount = arg1.getRowCount();
  10.             var column = arg1.getColumn();
  11.             var columnCount = arg1.getColumnCount();
  12.             var source = arg1.getSource();
  13.             var rangeCount = arg1.getRangeCount();

  14.             var value = source.getValue(row+1, column+1);

  15.             // The value should be 2
  16.             console.log(value);

  17.             return GC.Spread.CalcEngine.CalcError.parse("#Value!");
  18.         };
复制代码


CustomFormula.html

4.17 KB, 下载次数: 486

回复 使用道具 举报
jasonleeoffice
注册会员   /  发表于:2018-10-12 15:02:55
板凳
KevinChen 发表于 2018-10-12 10:38
您好,我贴一个Demo,里面有具体获取值的方法,

关键代码如下, Demo见附件:

没看明白!但是感觉你没明白我的意思,  比如附件方法里面参数是A1:C5,  我想获取的是A1到C5所有的值,而且是@格式的,0.00就是0.00,不是0   。     
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-10-12 15:13:41
地板
Demo中演示了在公式执行时获取公式参数引用的单元格坐标range。

row表示起始行标,column表示起始列标,rowCount表示行数,columnCount表示列数

你用两个for循环嵌套就可以获取到所有单元格的值、或者单元格的格式字符串。

你用sheet.getValue() 获取到的就是值,用sheet.getText() 拿到的就是带格式的字符串,

API地址:

http://help.grapecity.com/spread ... ksheet~getText.html
回复 使用道具 举报
jasonleeoffice
注册会员   /  发表于:2018-10-13 14:24:01
5#
本帖最后由 jasonleeoffice 于 2018-10-13 14:51 编辑

image.png305900267.png

我的这个方法好像和你写的还不一样: 进入到这个方法以后:args和 arguments[0]都是-150,arguments[1]是undefined我的公式是:=ROUND(SUM(A1:E1)-SUM(A2:E2))
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-10-15 09:02:21
6#
您代码里有没有重写acceptsReference 函数?

就是我在1楼贴的代码里,第一个重写的函数。

  1. CustomFunctionWithContext.prototype.acceptsReference = function () {
  2.             return true;
  3.         };
复制代码


如果写了还是不行,把你出问题的代码贴个完整版的附件,或者贴一个能重现问题的Demo,我们帮您排查一下。
回复 使用道具 举报
jasonleeoffice
注册会员   /  发表于:2018-10-18 10:09:57
7#
本帖最后由 jasonleeoffice 于 2018-10-18 10:11 编辑

image.png475482482.png
image.png227438658.png
之前确实是忽略了acceptsReference 我加上以后,第二个参数不是一个对象,直接就是一个值!这个怎么处理?
我看你给我的demo,没有返回最终的值,怎么来获取最终的值?
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-10-18 10:14:35
8#
好的,很高兴解决了您的问题,本帖我结帖操作了,有别的问题欢迎发新帖~
回复 使用道具 举报
jasonleeoffice
注册会员   /  发表于:2018-10-18 16:32:04
9#
KevinChen 发表于 2018-10-18 10:14
好的,很高兴解决了您的问题,本帖我结帖操作了,有别的问题欢迎发新帖~

别呀,哥哥,问题还没解决完呢!
我的两个参数返回的内容还是和demo里面不一样(有一个一样了,之前两个都不一样),而且demo里面少了一个计算完之后结果的一个参数。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-10-19 14:19:13
10#
没关系,有问题继续解决就行,您这样吧,把您的代码和依赖的SpreadJS打个包传上来,

我这边给您调试一下看看问题出在哪里。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部