多列分组合并bug

楼主
我是社区第63843位番薯,欢迎点我头像关注我哦~
数据集展示如下 :现在要求A列分组合并,B列、C列根据A列分组合并。我做了下测试,设置如下
A列:
B列:
C列:
结果显示:

我需要的结果: ,A列值相同的分组合并,B列、C列的合并条件为A列值相同,自身列值相同才能合并。


分享扩散:

沙发
发表于 2017-4-1 14:36:30
楼主,系统显示您是合作/跟进客户,请直接联系技术支持QQ:800049425进行反馈。
若您因其他原因,不便/不想找我们技术QQ,请点击本楼层右下角回复告知,我会代为提交,建议您点击一下页面顶部的微信按钮进行论坛账号绑定,可以第一时间收到帖子回复提醒以及更多精彩内容,谢谢!
板凳
发表于 2017-4-7 14:27:39
请帮忙提交这个bug,给你们开发部门吧。本人因为比较忙,无法实时联系贵公司的技术。谢谢。
地板
发表于 2017-4-7 14:29:32
请帮忙提交这个bug,给你们开发部门吧。本人因为比较忙,无法实时联系贵公司的技术。谢谢。
5楼
发表于 2017-4-10 14:06:05
感谢您的反馈,已为您提交工单,处理编号353116。

注:因为帆软每天都会收到非常多的需求和bug反馈,我们不能保证会及时处理每一个用户的反馈,还请谅解。
如果您想知道自己提交的反馈是否会得到及时处理以及处理进度等,可以将上述处理编号发送给我们的帆软技术支持  QQ:800049425(不是群!!)  电话:400-850-5048(若咨询报价请转各地区分机号,详见http://www.finereport.com/company/contact

欢迎关注帆软微信公众号(ID:帆软软件)以及传说哥个人微信号(ID:FanRuanBD),了解最新资讯。
针对您提交的内容,帆软相关负责人可能会来给您回帖询问细节,还请耐心解答。
6楼
发表于 2025-7-29 10:50:58
问题解决了吗
7楼
发表于 2025-11-12 14:59:45
问题解决了吗?我也被这问题困恼
8楼
发表于 2026-2-12 17:03:57

RE: 多列分组合并bug

应该和我这个类似,用帆软纯内置的父格,好像做不到想要的效果:
当前可以设置为:

 

A列第一个最父格可以设置 分组
B列设置列表,
C列设置列表,
然后用JS去改变B,C列的行结构。相同的进行合并合并处理。

 

 
后面的分组其实已经没用了,父格是列表,后面的设置分组也用,MID是用来作为分组的依据。

 

 

下面是一个示例代码,可以参考一下,我这个是处理数字的,其他的需要自己调整一下,(PS:不要在意里面的变量名称,当时好多是乱取的,没注释的地方,可以问一下AI)。

 

setTimeout(function() {

        var firstRow = 3;

        var totalRow = $("td[id^=B]:last").attr("row");

        var tableId = $('.frozen-table').find('table').first().attr('id');

        if (typeof(tableId) === "undefined") {

                tableId = 0;

        }

        totalRow = parseInt(totalRow);

        var valueN = 0;

        var valueQ = 0;

        for (var i = firstRow; i < totalRow; i++) {

                var v = _g().getCellValue(0, 2, i);

                var v1 = v.slice(0, 1);



                //  合并单元格  

                if (v1 == 'S') {

                        var row = $('td[id=C' + (i + 1) + '-0-' + tableId + ']').attr('style');

                        if (row == 'display:none;') {

                                // console.log("i:", i, "   没rowspan")

                                var rows = cknum('C', (i + 2), tableId)



                                // console.log("i:", i, "   Srowspan:", rows)

                                for (var j = 1; j < rows; j++) {

                                        $('td[id=N' + (i + j + 1) + '-0-' + tableId + ']').remove();

                                        $('td[id=O' + (i + j + 1) + '-0-' + tableId + ']').remove();

                                        $('td[id=P' + (i + j + 1) + '-0-' + tableId + ']').remove();

                                        $('td[id=T' + (i + j + 1) + '-0-' + tableId + ']').remove();

                                        $('td[id=V' + (i + j + 1) + '-0-' + tableId + ']').remove();

                                }

                                $('td[id=N' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);

                                $('td[id=O' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);

                                $('td[id=P' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);

                                $('td[id=T' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);

                                $('td[id=V' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);

                        }

                } else if (v1 == 'H') {

                        var row = $('td[id=C' + (i + 1) + '-0-' + tableId + ']').attr('style');

                        if (row == 'display:none;') {

                                // console.log("i:", i, "   没rowspan")

                                var rows = cknum('C', (i + 2), tableId)



                                // console.log("i:", i, "   Hrowspan:", rows)

                                for (var K = 1; K < rows; K++) {

                                        $('td[id=Q' + (i + K + 1) + '-0-' + tableId + ']').remove();

                                        $('td[id=R' + (i + K + 1) + '-0-' + tableId + ']').remove();

                                        $('td[id=S' + (i + K + 1) + '-0-' + tableId + ']').remove();

                                        $('td[id=U' + (i + K + 1) + '-0-' + tableId + ']').remove();

                                        $('td[id=W' + (i + K + 1) + '-0-' + tableId + ']').remove();

                                }

                                $('td[id=Q' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);

                                $('td[id=R' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);

                                $('td[id=S' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);

                                $('td[id=U' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);

                                $('td[id=W' + (i + 1) + '-0-' + tableId + ']').attr('rowspan', rows);

                        }

                } else {

                        continue;

                }

        }

        var valueN = 0;

        var valueQ = 0;

        // var valueP = 0;

        var valueS = 0;

        var valueQ = 0;

        // var valueT = 0;

        var valueU = 0;

        for (var i = firstRow; i <= totalRow; i++) {

                var cv = _g().getCellValue("C" + i);

                // console.log("cv:", cv,i)

                if (!cv) {

                        var v = getMergeCellValue("C", i);

                        var ckv = v.slice(0, 1);

                        if (ckv == "S") {

                                var Qvalue = parseInt(_g().getCellValue("Q" + i));

                                var Svalue = parseInt(_g().getCellValue("S" + i));

                                // var Svalue = parseInt(_g().getCellValue("T" + i));

                                if (isNaN(Qvalue)) Qvalue = 0;

                                valueQ += Qvalue;

                                if (isNaN(Svalue)) Svalue = 0;

                                valueS += Svalue;

                                // if(isNaN(Tvalue)) Tvalue = 0;

                                // valueT += Tvalue;





                        }

                        if (ckv == "H") {

                                var Nvalue = parseInt(_g().getCellValue("N" + i));

                                // var Pvalue = parseInt(_g().getCellValue("P" + i));

                                var Uvalue = parseInt(_g().getCellValue("U" + i));

                                if (isNaN(Nvalue)) Nvalue = 0;

                                valueN += Nvalue;

                                // if(isNaN(Pvalue)) Pvalue = 0;

                                // valueP += Pvalue;

                                if (isNaN(Uvalue)) Uvalue = 0;

                                valueU += Uvalue;





                        }

                } else {

                        var Nvalue = parseInt(_g().getCellValue("N" + i));

                        if (isNaN(Nvalue)) Nvalue = 0;

                        var Qvalue = parseInt(_g().getCellValue("Q" + i));

                        if (isNaN(Qvalue)) Qvalue = 0;

                        // var Pvalue = parseInt(_g().getCellValue("P" + i));

                        // if(isNaN(Pvalue)) Pvalue = 0;                        

                        var Svalue = parseInt(_g().getCellValue("S" + i));

                        if (isNaN(Svalue)) Svalue = 0;

                        // var Tvalue= parseInt(_g().getCellValue("T" + i));

                        // if(isNaN(Tvalue)) Tvalue = 0;

                        var Uvalue = parseInt(_g().getCellValue("U" + i));

                        if (isNaN(Uvalue)) Uvalue = 0;



                        valueN += Nvalue;

                        valueQ += Qvalue;

                        valueS += Svalue;

                        // valueP += Pvalue;

                        // valueT += Tvalue;

                        valueU += Uvalue;

                }

        }

        // console.log("totalRow:", (totalRow+1), "tableId:", tableId)

        // console.log("valueN:", valueN, "valueQ:", valueQ)

        _g().setCellValue("N" + (totalRow + 1), valueN);

        _g().setCellValue("Q" + (totalRow + 1), valueQ);

        // _g().setCellValue("P" + (totalRow+1), valueP);

        _g().setCellValue("S" + (totalRow + 1), valueS);

        // _g().setCellValue("T" + (totalRow+1), valueT);

        _g().setCellValue("U" + (totalRow + 1), valueU);

        //        originalToast({message:"消息内容",type:"success"});

        FR.Msg.toast({

                message: "加载完成",

                type: "success"

        })



}, 200)





function cknum(col, row, tableId, value = 1) {

        var style = $('td[id=' + col + row + '-0-' + tableId + ']').attr('style');

        // console.log("style:", typeof(style))

        if (typeof(style) != 'undefined') {

                return value;

        } else {

                value++;

                value = cknum(col, row + 1, tableId, value);

        }

        return value;

}



function getMergeCellValue(col, row, totalRow) {

        if (row > totalRow) {

                // value++;

                return value;

        }

        // 尝试获取指定列和行的单元格值

        var value = _g().getCellValue(col + (row - 1));

        // 如果当前值为空,递归调用cknum,行号减1,向上查找值

        if (!value) {

                value = getMergeCellValue(col, row - 1);

        }

        // 返回最终找到的值

        return value;

}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

7回帖数 1关注人数 9920浏览人数
最后回复于:2026-2-12 17:05

返回顶部 返回列表