找回密码
 立即注册

QQ登录

只需一步,快速开始

mohai
注册会员   /  发表于:2017-9-4 17:31  /   查看:2733  /  回复:4
本帖最后由 mohai 于 2017-9-4 17:32 编辑

我注册了一个 defineGlobalCustomFunction 自定义公式 ,  公式是 SUMBD() .

$.wijmo.wijspread.Calc.Functions.defineGlobalCustomFunction("SUMBD",  function(args, context){
                                return funcSUMBD(view, context.row, context.column);//这个是计算的处理函数,
                        },{
                                override:true,
                                isContextSensitive: function(){return true;},
                                isVolatile: function(){return true;}        
                        }
                );

我在报表中使用公式的时候,只有一个sheet页的时候使用时没有问题的,如果报表是多个sheet,使用公式时会出现问题:
例如:一个报表有三个sheet页 ; 给sheet1,sheet2,sheet3, 的F6 单元格都设置一个SUMBD()公式;
当sheet1上与B1单元格公式相关的 单元格值发生改变时,触发计算, 第一个sheet页的 SUMBD() 公式计算结果没有问题,
但是他还会触发其他sheet页的 SUMBD() 公式, sheet2 的计算结果 = sheet1 的公式计算结果, sheet3 的计算结果 = sheet1.计算结果,
我跟踪了一下,发现不论公式在哪个sheet页上定义 ,当触发计算的时候只取ActiveSheet页上的数据,而不是根据公式所在sheet的数据来计算.
blob127465819.png blob707302245.png blob55197752.png
请问,这个问题应该如何解决?

blob879815063.png
blob980210876.png

4 个回复

倒序浏览
CCKan
银牌会员   /  发表于:2017-9-4 18:05:34
推荐
因为你的自定义函数没有参数,取数据是你在 funcSUMBDL 中根据 context.row, context.column 自己取的,所以你肯定是从 ActiveSheet 取数据了,用
var sheetName = context.source.getName();
var sheet = spread.getSheetFromName(sheetName);
获取公式所在的 sheet,然后调该 sheet.getValue() 获取值就好了
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-9-12 20:13:46
板凳
CCKan 发表于 2017-9-4 18:05
因为你的自定义函数没有参数,取数据是你在 funcSUMBDL 中根据 context.row, context.column 自己取的,所 ...

谢谢!很管用
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-9-12 20:13:52
地板
CCKan 发表于 2017-9-4 18:05
因为你的自定义函数没有参数,取数据是你在 funcSUMBDL 中根据 context.row, context.column 自己取的,所 ...

谢谢!很管用
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-9-13 12:07:44
5#
那就结帖了,有什么问题欢迎另开新帖进行询问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部