请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

1225932566

金牌服务用户

46

主题

116

帖子

474

积分

金牌服务用户

积分
474

[已处理] 自定义函数#NAME?

1225932566
金牌服务用户   /  发表于:2017-9-15 16:06  /   查看:7511  /  回复:11
本帖最后由 1225932566 于 2017-9-16 15:24 编辑

自定义的函数在这个Excel中没有执行。这个自定义函数实现,下面这种情况是否会单元格循环引用?

QQ截图20170915160150.png
捕获.PNG

formula (2).js (634 Bytes, 下载次数: 200)

11 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-9-15 18:00:04
沙发
您好:
这个问题我调研一下,星期一给您答复
回复 使用道具 举报
1225932566
金牌服务用户   /  发表于:2017-9-15 18:04:01
板凳
ClarkPan 发表于 2017-9-15 18:00
您好:
这个问题我调研一下,星期一给您答复

好,这个问题确实较奇怪
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-9-15 18:04:30
地板
回复 使用道具 举报
1225932566
金牌服务用户   /  发表于:2017-9-18 14:09:30
5#

请问这个问题有眉目了吗
回复 使用道具 举报
CCKan
银牌会员   /  发表于:2017-9-18 16:12:58
6#
你好,主要是因为你所有用 SYSUM 函数的单元格都引用了自己,所以造成了循环引用;而一旦有循环引用,就会打乱公式的依赖关系,造成错误。
请问你为什么 SYSUM 函数的单元格要引用自己呢?我看看有没有办法能够绕过这个问题
回复 使用道具 举报
1225932566
金牌服务用户   /  发表于:2017-9-18 17:16:07
7#
本帖最后由 1225932566 于 2017-9-18 17:57 编辑
CCKan 发表于 2017-9-18 16:12
你好,主要是因为你所有用 SYSUM 函数的单元格都引用了自己,所以造成了循环引用;而一旦有循环引用,就会 ...

首页设置了函数=SUM('V2018--项目级--物业项目'!E7+'V2018--项目级--售场'!E7+'V2018--项目级--公司部门'!E7)

用来合计【V2018--项目级--物业项目】【V2018--项目级--售场】【V2018--项目级--公司部门】这3张Sheet中的E7单元格,所以

就有了=SYSUM('V2018--项目级--物业项目'!E7)、=SYSUM('V2018--项目级--售场'!E7)、=SYSUM('2018--项目级--公司部门'!E7)

我会通过函数中对应的Sheet名称去数组中查找数据。







现在如果无法绕过的话,我可以在evaluate中获取函数=SYSUM('V2018--项目级--售场'!E7)中的Sheet和单元格吗?
以便不通过这种间接方式,直接在首页实现=SYSUM('V2018--项目级--物业项目'!E7)+SYSUM('V2018--项目级--售场'!E7)+SYSUM('V2018--项目级--公司部门'!E7)


QQ截图20170918170631.png




QQ截图20170918170631.png
回复 使用道具 举报
CCKan
银牌会员   /  发表于:2017-9-18 18:16:59
8#
能否这样:
把函数的参数改成引用单元格的字符串,比如:
=SYSUM("'V2018--项目级--物业项目'!E7")
然后在 evalute 中解析这个字符串以后得到单元格的引用:
            SysumFunction.prototype.evaluate = function (context, referenceCellString) {
                var rangeExpression = GC.Spread.Sheets.CalcEngine.formulaToExpression(sheet, referenceCellString, 0, 0);
                var sheetName = rangeExpression.source.getName();
                var row = rangeExpression.row;
                var column = rangeExpression.column;
                return 10;
            };
回复 使用道具 举报
1225932566
金牌服务用户   /  发表于:2017-9-18 19:32:34
9#
本帖最后由 1225932566 于 2017-9-18 19:46 编辑
CCKan 发表于 2017-9-18 18:16
能否这样:
把函数的参数改成引用单元格的字符串,比如:
=SYSUM("'V2018--项目级--物业项目'!E7")



好的,我试下您的方法。那个referenceCellString是怎么得到的呢。API中描述的是传入formula。
QQ截图20170918170631.png

我是这样找的,感觉不靠谱。

QQ截图20170918170631.png


回复 使用道具 举报
CCKan
银牌会员   /  发表于:2017-9-19 10:39:30
10#
referenceCellString 就是你公式的第一个参数呀,如果你把公式设置成:
=SYSUM("'V2018--项目级--物业项目'!E7")
那么,referenceCellString 就是 "'V2018--项目级--物业项目'!E7"
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部