找回密码
 立即注册

QQ登录

只需一步,快速开始

mohai
注册会员   /  发表于:2017-10-30 21:54  /   查看:3576  /  回复:7
SpreadJS9 定义自定义公式时可否从公式中获取Spread对象或Sheet对象?请各位大佬解答 blob653222045.png


window.onload = function () {
        var spread2 = new GcSpread.Sheets.Spread(document.getElementById('ss'), {sheetCount:1 });
                                var spread1 = new GcSpread.Sheets.Spread(document.getElementById('ss1'),{sheetCount:1 });
                       
                                $.wijmo.wijspread.Calc.Functions.defineGlobalCustomFunction("SUMBD",  function(args, context){
                                var sheetName = context.source.getName();
                                var row = context.row;
                                var col = context.col;
                                var sheetInx = spread2.getSheetIndex(sheetName);
                                var sheet = spread2.getSheet(sheetInx);
                                var rowLevel = sheet.rowRangeGroup.getLevel(row);
                                if(rowLevel<0){
                                                var i = 1;
                                                var sum = sheet.getValue(row,col);
                                                while(sheet.rowRangeGroup.getLevel(row+i) == rowLevel+1){
                                                        sum = sum + sheet.getValue(row+i);
                                                        i++;
                                                }
                                        return i;
                                }else{
                                        return 0;
                                }
                               
                        },{
                                override:true,
                                isContextSensitive: function(){return true;},
                                isVolatile: function(){return true;}       
                        }
                );
                       
                       
                       
                        var sheet1 = spread1.getActiveSheet();                       
                        var sheet2 = spread2.getActiveSheet();
                       
                        //设置值
                        sheet2.setValue(2,0,1);
                        sheet2.setValue(3,0,1);
                        sheet2.setValue(4,0,1);
                        sheet2.setValue(5,0,1);
                        //sheet2.setValue(6,0,1);
                       
                        sheet1.setValue(2,0,2);
                        sheet1.setValue(3,0,2);
                        sheet1.setValue(4,0,2);
                        sheet1.setValue(5,0,2);
                        //设置分组
                        sheet2.rowRangeGroup.direction =$.wijmo.wijspread.RangeGroupDirection.Backward;//Forward
                       
                        sheet1.rowRangeGroup.direction =$.wijmo.wijspread.RangeGroupDirection.Backward;//Forward
                       
                        sheet2.rowRangeGroup.group(2, 4);
                        sheet1.rowRangeGroup.group(2, 4);
                       
                        sheet2.setFormula(1,0,'SUMBD()');
                        sheet1.setFormula(1,0,'SUMBD()');
    };




7 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-10-31 10:47:51
沙发
您好:

您获取spread对象,和sheet对象的目的是什么?也就是说您获取了这些对象是用来做什么?
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-10-31 11:58:21
板凳
是为了分组汇总计算下一级的数据和
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-10-31 11:59:29
地板
本帖最后由 mohai 于 2017-10-31 12:05 编辑

比如我发的截图上显示的,第二行下面建立了4个子行,在a 2单元格定义公式sumbd ,计算结果应该是下面4个子行的和,所以在公式中,要获取到sheet 对象,从公式所在的行开始逐行判断这一行是否是子行,如果是就sum +这一行a列单元格的值
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-10-31 14:40:31
6#
您好,您可以通过context.source.getValue(x,y)获取触发当前sheet中指定单元格的值
根据您的需求,这里的x,y 您可以通过context.row,context.column获得当前单元格的坐标后,根据您的需求,将平移获得指定单元格的坐标,例如context.row+1,context.column就是获得触发公式单元格下一行的单元格坐标
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-10-31 18:15:33
9#
sheet.rowRangeGroup.getLevel  我要用这个level 来判断是否是公式所在行的下一级分组
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-10-31 18:24:10
10#
你看我的粘出来的代码,我就是想实现,spread 1的A2 单元格是计算,下面一个分组(四行)的和,spread2也是一样的效果,不过spread1是计算spread1的,spread2是计算spread2的
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-11-1 10:59:27
11#
通过var sheetName = context.source.getName();
var sheet = context.source.getSheet(sheetName);
就可以获得该Spread对应的sheet对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部