找文章 / 找答案
  • 发帖数2
  • 粉丝2

此人很懒,什么也没有留下

    精选问答 更多内容

    [可视化] 脚本控制动态参数列的表头合并失败了,怎么处理?

    vinjack玄铁二 显示全部楼层 发表于 2022-7-15 10:36:41 |阅读模式 打印 上一主题 下一主题
    本帖最后由 yhdata_nvte1Y2E 于 2022-7-15 10:39 编辑

    在一个普通表中定义了12个可选参数列,且此表是3行表头,需求是勾选参数列时,能自动合并表头自己写了脚本实现动态合并表头,但目前遇到了表头合并失败的问题,具体情况如下:

    报表样式:


    表头合并失败问题:

    表头合并失败问题

    表头合并失败问题



    实现脚本:
    refreshData();
    var data = getViewData("表1"); //获得表格对象
    data.exists(10000, -1, true); //检测表格是否加载完。


    //------------------------------------------------------------------------------------------------
    //   公共函数定义
    //------------------------------------------------------------------------------------------------
    //统计动态列勾选情况
    function getColStatus(colList)
    {
        var selCnt = 0;
        var selCol = [];
        for(var i = 0; i < colList.length; i++)
        {
            var colName = colList;
            if(colName.getSelectedObjects().length > 0)
            {
                selCol[selCnt] = new Array();
                var colLab = colName.getObjects()[0][1].toString();
                selCol[selCnt]= [0,selCnt,3,1,colLab];
                selCnt = selCnt + 1;
            }
        }
        return selCol;
    }

    //合并单元格公共函数
    function spanCol(colList,colCnt)
    {
        for(col = 0;col < colList.length;col++)
        {
            var startLocX = colList[col][0];
            var startLocY = integer(colList[col][1]) + integer(colCnt);
            var spanDimY = colList[col][2];
            var spanDimX = colList[col][3];
            var spanMsg = colList[col][4];
            var startLoc = [startLocX + ',' + startLocY];
            var spanDim = new Dimension(spanDimX,spanDimY);
            var spanLoc = new Locator(startLoc,CELL,HEADER);
            tableName.setSpan(spanLoc, spanDim);
            tableName.setFormat(spanLoc, MESSAGE_FORMAT)
            tableName.setHAlignment(spanLoc,1);//表头居中显示
            tableName.setFormatPattern(spanLoc, spanMsg);
            tableName.setBorderColor(spanLoc, new Color(0xA5C9E1));//边框颜色
        }
    }

    //------------------------------------------------------------------------------------------------
    //   动态列合并单元格实现
    //------------------------------------------------------------------------------------------------

    var tableName = 表1;
    var startDimLoc = 3;
    var startMeaLoc = -51;//
    var totSelnum = 12;//动态列总数

    var colList=[区域名称维,城市公司维,项目编码维,项目名称维,分期编码维,分期名称维,一级业态维,二级业态维,装修标准维,产品编码维,产品名称维,持股比例维];
    var spanColDim = getColStatus(colList);
    var selColCnt = spanColDim.length;            //勾选的动态列数
    var totColNum = tableName.binding.colCount;  //绑定字段总列数
    var curColNum = totColNum - totSelnum + selColCnt; //获取当前总列数

    spanCol(spanColDim,startDimLoc);


    //var spanColCur = [[0,-51,1,22,'当前期间('+param['period_cur']+')'],[1,-51,1,2,"全周期"],[1,-49,1,2,"项目累计发生"],[1,-47,1,5,"全周期成本与土增税"],[1,-42,1,13,"单月毛利情况"]];
    //var spanColHis = [[0,-29,1,11,'对比期间('+param['period_his']+')'],[1,-29,1,2,"项目累计发生"],[1,-27,1,9,"以前期间成本累调影响"]];
    //var spanColLast = [[0,-18,1,18,'上年末期间('+param['period_last']+')'],[1,-18,1,2,"全周期"],[1,-16,1,2,"项目累计发生"],[1,-14,1,5,"全周期成本与土增税"],[1,-9,1,9,"以前期间成本累调影响"]];

    //spanCol(spanColCur,curColNum);
    //spanCol(spanColHis,curColNum);
    //spanCol(spanColLast,curColNum);

    报表样式

    报表样式
    回复

    使用道具 举报

    精彩评论4

    _YH_lashi白银四 显示全部楼层 发表于 2022-7-15 11:16:07
    943不需要写脚本就行,请问您是什么版本
    回复

    使用道具 举报

    vinjack玄铁二 显示全部楼层 发表于 2022-7-15 11:19:15
    _YH_lashi 发表于 2022-7-15 11:16
    943不需要写脚本就行,请问您是什么版本

    943是什么?永洪版本是8.0.3
    回复

    使用道具 举报

    _YH_lashi白银四 显示全部楼层 发表于 2022-7-15 11:25:42
    vinjack 发表于 2022-7-15 11:19
    943是什么?永洪版本是8.0.3

    那你参考这个写一下
    function testRemove(str) {
        if (str != null) return str.toUpperCase() == "REMOVE";
        else return true;
    }

    var selStartIndex = integer(p_dim_region.getSelectedObjects().length + p_dim_bu_name.getSelectedObjects().length + p_dim_pd_name.getSelectedObjects().length + (testRemove(下拉列表参数4.getSelectedObjects()[0]) ? 0 : 1) + (testRemove(下拉列表参数5.getSelectedObjects()[0]) ? 0 : 1))

    //向loc对应的格子输入文字message
    function setLocatorMessage(elemName, loc, message) {
        var elem_v = eval(elemName);
        elem_v.setFormat(loc, MESSAGE_FORMAT);
        elem_v.setFormatPattern(loc, message);
    }
    //设置合并单元格,locStart对应的格子,向右x个格子,向下y个格子,边框的类型,文字和背景色、前景色
    function setcellSpan(elemName, locStart, x, y, lineColor, lineType, bc, fc, message) {
        var elem_v = eval(elemName);
        elem_v.setSpan(locStart, new Dimension(x, y));
        var c1 = new Insets(lineType, lineType, lineType, lineType);
        elem_v.setBorders(locStart, c1);
        elem_v.setBorderColor(locStart, lineColor);
        elem_v.setForeground(locStart, fc);
        elem_v.setBackground(locStart, bc);
        setLocatorMessage(elemName, locStart, message)
    }
    //清除区域内所有的边框
    function clearAllBorder(elemName, loc_start_r, loc_start_c, x, y) {
        var elem_v = eval(elemName);
        var loc_end_c = integer(loc_start_c + x - 1);
        var loc_end_r = integer(loc_start_r + y - 1);
        //遍历每一个格子
        for (var i = loc_start_c; i <= loc_end_c; i++) {
            for (var j = loc_start_r; j <= loc_end_r; j++) {
                var index_up_i = j + "," + i;
                var loc_up_i = new Locator([index_up_i], CELL, HEADER);
                var c = new Insets(NO_BORDER, NO_BORDER, NO_BORDER, NO_BORDER);
                elem_v.setBorders(loc_up_i, c);
                setLocatorMessage(elemName, loc_up_i, "");
            }
        }
    }
    //
    function setelemHeaderspan(elemName, loc_start_r, loc_start_c, x, y, isSpan, lineColor, lineType, bc, fc, message) {
        var elem_v = eval(elemName);
        var loc_end_c = integer(loc_start_c + x - 1);
        var loc_end_r = integer(loc_start_r + y - 1);
        var loc_start = new Locator([loc_start_r + "," + loc_start_c], CELL, HEADER);
        clearAllBorder(elemName, loc_start_r, loc_start_c, x, y);

        if (isSpan) { //如果需要合并单元格
            setcellSpan(elemName, loc_start, x, y, lineColor, lineType, bc, fc, message)
        } else {
            if (x == 1 && y == 1) {
                //直接画边框
                var c = new Insets(lineType, lineType, lineType, lineType);
                elem_v.setBorders(loc_start, c);
                elem_v.setBorderColor(loc_start, lineColor);
            } else {
                //设置上边框
                for (var i = loc_start_c; i <= loc_end_c; i++) {
                    var index_up_i = loc_start_r + "," + i;
                    var loc_up_i = new Locator([index_up_i], CELL, HEADER);
                    var c = new Insets(lineType, NO_BORDER, NO_BORDER, NO_BORDER);
                    elem_v.setBorders(loc_up_i, c);
                    elem_v.setBorderColor(loc_up_i, lineColor);
                }

                //设置左边框
                var loc_left_0 = new Locator([loc_start_r + "," + loc_start_c], CELL, HEADER);
                var c = new Insets(lineType, lineType, NO_BORDER, NO_BORDER);
                elem_v.setBorders(loc_left_0, c);
                elem_v.setBorderColor(loc_left_0, lineColor);
                for (var i = loc_start_r + 1; i <= loc_end_r; i++) {
                    var index_left_i = i + "," + loc_start_c;
                    var loc_left_i = new Locator([index_left_i], CELL, HEADER);
                    var c = new Insets(NO_BORDER, lineType, NO_BORDER, NO_BORDER);
                    elem_v.setBorders(loc_left_i, c);
                    elem_v.setBorderColor(loc_left_i, lineColor);
                }
                //设置下边框
                var loc_bottom_0 = new Locator([loc_end_r + "," + loc_start_c], CELL, HEADER);
                var c = new Insets(NO_BORDER, lineType, lineType, NO_BORDER);
                elem_v.setBorders(loc_bottom_0, c);
                elem_v.setBorderColor(loc_bottom_0, lineColor);
                for (var i = loc_start_c + 1; i <= loc_end_c; i++) {
                    var index_bottom_i = loc_end_r + "," + i;
                    var loc_bottom_i = new Locator([index_bottom_i], CELL, HEADER);
                    var c = new Insets(NO_BORDER, NO_BORDER, lineType, NO_BORDER);
                    elem_v.setBorders(loc_bottom_i, c);
                    elem_v.setBorderColor(loc_bottom_i, lineColor);
                }
                //设置右边框
                var loc_right_0 = new Locator([loc_end_r + "," + loc_end_c], CELL, HEADER);
                var c = new Insets(NO_BORDER, NO_BORDER, lineType, lineType);
                elem_v.setBorders(loc_right_0, c);
                elem_v.setBorderColor(loc_right_0, lineColor);

                for (var i = loc_start_r + 1; i < loc_end_r; i++) {
                    var index_right_i = i + "," + loc_end_c;
                    var loc_right_i = new Locator([index_right_i], CELL, HEADER);
                    var c = new Insets(NO_BORDER, NO_BORDER, NO_BORDER, lineType);
                    elem_v.setBorders(loc_right_i, c);
                    elem_v.setBorderColor(loc_right_i, lineColor);
                }
                var loc_right_e = new Locator([loc_start_r + "," + loc_end_c], CELL, HEADER);
                var c = new Insets(lineType, NO_BORDER, NO_BORDER, lineType);
                elem_v.setBorders(loc_right_e, c);
                elem_v.setBorderColor(loc_right_e, lineColor);

                if (y == 1) {
                    var c = new Insets(lineType, lineType, lineType, NO_BORDER);
                    elem_v.setBorders(loc_start, c);
                    elem_v.setBorderColor(loc_start, lineColor);
                    for (var i = loc_start_c + 1; i < loc_end_c; i++) {
                        var index_right_i = loc_start_r + "," + i;
                        var loc_right_i = new Locator([index_right_i], CELL, HEADER);
                        var c = new Insets(lineType, NO_BORDER, lineType, NO_BORDER);
                        elem_v.setBorders(loc_right_i, c);
                        elem_v.setBorderColor(loc_right_i, lineColor);
                    }
                    var loc_right_e = new Locator([loc_start_r + "," + loc_end_c], CELL, HEADER);
                    var c = new Insets(lineType, NO_BORDER, lineType, lineType);
                    elem_v.setBorders(loc_right_e, c);
                    elem_v.setBorderColor(loc_right_e, lineColor);
                }
                if (x == 1) {
                    var c = new Insets(lineType, lineType, NO_BORDER, lineType);
                    elem_v.setBorders(loc_start, c);
                    elem_v.setBorderColor(loc_start, lineColor);
                    for (var i = loc_start_r + 1; i < loc_end_r; i++) {
                        var index_right_i = i + "," + loc_start_c;
                        var loc_right_i = new Locator([index_right_i], CELL, HEADER);
                        var c = new Insets(NO_BORDER, lineType, NO_BORDER, lineType);
                        elem_v.setBorders(loc_right_i, c);
                        elem_v.setBorderColor(loc_right_i, lineColor);
                    }
                    var loc_right_e = new Locator([loc_end_r + "," + loc_end_c], CELL, HEADER);
                    var c = new Insets(NO_BORDER, lineType, lineType, lineType);
                    elem_v.setBorders(loc_right_e, c);
                    elem_v.setBorderColor(loc_right_e, lineColor);
                }

                elem_v.setForeground(loc_start, fc);
                elem_v.setBackground(loc_start, bc);
             
            }
               //向起始格子设置文字
                setLocatorMessage(elemName, loc_start, message)
        }
    }

    //
    function setelemCellspan(elemName, loc_start_r, loc_start_c, x, y, isSpan, lineColor, lineType, bc, fc, message) {
        var elem_v = eval(elemName);
        var loc_end_c = integer(loc_start_c + x - 1);
        var loc_end_r = integer(loc_start_r + y - 1);
        //debug(loc_start_r+",,,,,,,"+loc_start_c)
        //debug(loc_end_r+",,,,,,,"+loc_end_c)
        var loc_start = new Locator([loc_start_r + "," + loc_start_c], CELL, DETAIL);
        if (isSpan) { //如果需要合并单元格
            setcellSpan(elemName, loc_start, x, y, lineColor, lineType, bc, fc, message)
        } else {
            if (x == 1 && y == 1) {
                //直接画边框
                var c = new Insets(lineType, lineType, lineType, lineType);
                elem_v.setBorders(loc_start, c);
                elem_v.setBorderColor(loc_start, lineColor);
            } else {
                //设置上边框
                for (var i = loc_start_c; i <= loc_end_c; i++) {
                    var index_up_i = loc_start_r + "," + i;
                    var loc_up_i = new Locator([index_up_i], CELL, DETAIL);
                    var c = new Insets(lineType, NO_BORDER, NO_BORDER, NO_BORDER);
                    elem_v.setBorders(loc_up_i, c);
                    elem_v.setBorderColor(loc_up_i, lineColor);
                }

                //设置左边框
                var loc_left_0 = new Locator([loc_start_r + "," + loc_start_c], CELL, DETAIL);
                var c = new Insets(lineType, lineType, NO_BORDER, NO_BORDER);
                elem_v.setBorders(loc_left_0, c);
                elem_v.setBorderColor(loc_left_0, lineColor);
                for (var i = loc_start_r + 1; i <= loc_end_r; i++) {
                    var index_left_i = i + "," + loc_start_c;
                    var loc_left_i = new Locator([index_left_i], CELL, DETAIL);
                    var c = new Insets(NO_BORDER, lineType, NO_BORDER, NO_BORDER);
                    elem_v.setBorders(loc_left_i, c);
                    elem_v.setBorderColor(loc_left_i, lineColor);
                }
                //设置下边框
                var loc_bottom_0 = new Locator([loc_end_r + "," + loc_start_c], CELL, DETAIL);
                var c = new Insets(NO_BORDER, lineType, lineType, NO_BORDER);
                elem_v.setBorders(loc_bottom_0, c);
                elem_v.setBorderColor(loc_bottom_0, lineColor);
                for (var i = loc_start_c + 1; i <= loc_end_c; i++) {
                    var index_bottom_i = loc_end_r + "," + i;
                    var loc_bottom_i = new Locator([index_bottom_i], CELL, DETAIL);
                    var c = new Insets(NO_BORDER, NO_BORDER, lineType, NO_BORDER);
                    elem_v.setBorders(loc_bottom_i, c);
                    elem_v.setBorderColor(loc_bottom_i, lineColor);
                }
                //设置右边框
                var loc_right_0 = new Locator([loc_end_r + "," + loc_end_c], CELL, DETAIL);
                var c = new Insets(NO_BORDER, NO_BORDER, lineType, lineType);
                elem_v.setBorders(loc_right_0, c);
                elem_v.setBorderColor(loc_right_0, lineColor);

                for (var i = loc_start_r + 1; i < loc_end_r; i++) {
                    var index_right_i = i + "," + loc_end_c;
                    var loc_right_i = new Locator([index_right_i], CELL, DETAIL);
                    var c = new Insets(NO_BORDER, NO_BORDER, NO_BORDER, lineType);
                    elem_v.setBorders(loc_right_i, c);
                    elem_v.setBorderColor(loc_right_i, lineColor);
                }
                var loc_right_e = new Locator([loc_start_r + "," + loc_end_c], CELL, DETAIL);
                var c = new Insets(lineType, NO_BORDER, NO_BORDER, lineType);
                elem_v.setBorders(loc_right_e, c);
                elem_v.setBorderColor(loc_right_e, lineColor);

                if (y == 1) {
                    var c = new Insets(lineType, lineType, lineType, NO_BORDER);
                    elem_v.setBorders(loc_start, c);
                    elem_v.setBorderColor(loc_start, lineColor);
                    for (var i = loc_start_c + 1; i < loc_end_c; i++) {
                        var index_right_i = loc_start_r + "," + i;
                        var loc_right_i = new Locator([index_right_i], CELL, DETAIL);
                        var c = new Insets(lineType, NO_BORDER, lineType, NO_BORDER);
                        elem_v.setBorders(loc_right_i, c);
                        elem_v.setBorderColor(loc_right_i, lineColor);
                    }
                    var loc_right_e = new Locator([loc_start_r + "," + loc_end_c], CELL, DETAIL);
                    var c = new Insets(lineType, NO_BORDER, lineType, lineType);
                    elem_v.setBorders(loc_right_e, c);
                    elem_v.setBorderColor(loc_right_e, lineColor);
                }
                if (x == 1) {
                    var c = new Insets(lineType, lineType, NO_BORDER, lineType);
                    elem_v.setBorders(loc_start, c);
                    elem_v.setBorderColor(loc_start, lineColor);
                    for (var i = loc_start_r + 1; i < loc_end_r; i++) {
                        var index_right_i = i + "," + loc_start_c;
                        var loc_right_i = new Locator([index_right_i], CELL, DETAIL);
                        var c = new Insets(NO_BORDER, lineType, NO_BORDER, lineType);
                        elem_v.setBorders(loc_right_i, c);
                        elem_v.setBorderColor(loc_right_i, lineColor);
                    }
                    var loc_right_e = new Locator([loc_end_r + "," + loc_end_c], CELL, DETAIL);
                    var c = new Insets(NO_BORDER, lineType, lineType, lineType);
                    elem_v.setBorders(loc_right_e, c);
                    elem_v.setBorderColor(loc_right_e, lineColor);
                }
                elem_v.setForeground(loc_start, fc);
                elem_v.setBackground(loc_start, bc);
          
            }
                 //向起始格子设置文字
                setLocatorMessage(elemName, loc_start, message)
        }
    }
    回复

    使用道具 举报

    csmugua青铜一 显示全部楼层 发表于 2023-12-21 13:26:54
    我9.4.3.2动态列,多表头也有问题,上面代码也可以用吗?
    回复

    使用道具 举报

    高级模式
    您需要登录后才可以回帖 登录 | 免费注册

    • 官方微信

      欢迎关注永洪服务号!收费为0,价值无限

      扫码关注
    • 新浪微博

      让每位用户轻松挖掘数据价值!

      访问新浪微博
    • 智能客服
    50W

    会员等你来哦

    Copyright   ©2012-2024  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
    返回顶部