找回密码
 立即注册

QQ登录

只需一步,快速开始

mohai
注册会员   /  发表于:2017-9-1 16:07  /   查看:3113  /  回复:6
本帖最后由 mohai 于 2017-9-1 16:09 编辑

我现在有一个需求就是定义一个自定义计算公式,需要这个计算公式能自动计算其下级子行的值, blob224719542.png

比如说,在 6行 下面有 7,8 两个子行, 我在 D6 单元格定义公式,   当子行 7 或子行 8 的D列的值发生改变时把 D7+D8的值给 D6;
不确定下面有多少个子行,有可能有两个三个也有可能是几十个,这个能实现吗?  
自定义计算公式能否满足这个需求?

或者说需要用**带脚本来实现.



6 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-9-1 18:31:12
沙发
您好,您这个肯定得有一个规律吧,或者您详细的说一下您这么做的目的是什么。
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-9-1 19:34:17
板凳
本帖最后由 mohai 于 2017-9-1 19:35 编辑
ClarkPan 发表于 2017-9-1 18:31
您好,您这个肯定得有一个规律吧,或者您详细的说一下您这么做的目的是什么。

这个的应用就是需要按照层次 逐层往上面计算汇总, 但是这个层次不一定,需要动态的来改变,在我们系统中的应用就是每个人的权限不一样,权限不一样能查看的行列也都不一样,所以需要这个公式来汇总数据
如果说规律的话就是计算下面子行的和,不管下面有几个子行都进行统计求和?
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-9-4 09:36:33
地板
ClarkPan 发表于 2017-9-1 18:31
您好,您这个肯定得有一个规律吧,或者您详细的说一下您这么做的目的是什么。

$.wijmo.wijspread.Calc.Functions.defineGlobalCustomFunction("SUMBD",  function(args, context){
                                //console.log("SUMBD:"+context.sheetName);
                                return funcSUMBD(view, context.row, context.column);
                        },{
                                override:true,
                                isContextSensitive: function(){return true;},
                                isVolatile: function(){return true;}       
                        }
                );


在context 上下文对象中能否获得,当前计算的公式所在的sheet对应的sheet索引,或者是sheetName
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-9-4 18:38:03
5#
您好:

就像您说的
如果说规律的话就是计算下面子行的和,不管下面有几个子行都进行统计求和?
那就在自定义公式的计算方法中,去获取子行单元格的值的和。然后记性求和计算,返回计算结果。
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-9-4 19:03:37
6#
本帖最后由 mohai 于 2017-9-4 19:04 编辑
ClarkPan 发表于 2017-9-4 18:38
您好:

就像您说的

function initSpread(spread) {
        var spreadNS = GcSpread.Sheets;
        
        var sheet = spread.getSheet(0);

        function FactorialFunction() {
            this.name = "FACTORIAL";
            this.maxArgs = 1;
            this.minArgs = 1;
        }
        FactorialFunction.prototype = new spreadNS.Calc.Functions.Function();
        FactorialFunction.prototype.evaluate = function (args) {
            var result = 1;
            if (args.length === 1 && !isNaN(parseInt(args[0]))) {
                for (var i = 1; i <= args[0]; i++) {
                    result = i * result;
                }
                return result;
            }
            return "#VALUE!";
        }
        var factorial = new FactorialFunction();
            sheet.addCustomFunction(factorial);
            sheet.setFormula(1, 1, "=factorial(5)");
   
    };
这个是V9版本的中文教程上给的案例,请问,我应该怎么改写一下? 在计算的函数中获取 sheet对象来确定子行以及取值呢.
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-9-5 17:33:04
7#
因为公式有可能会跨sheet引用,所以在计算中无法拿到确切的sheet对象的,您的这种情况您可以将sheet当作参数传入自定义公式中。然后在evaluate解析args进行确定
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部