如何根据条件设置报表单元格合并原创
金蝶云社区-陈来珍
陈来珍
10人赞赏了该文章 2820次浏览 未经作者许可,禁止转载编辑于2023年02月24日 13:36:58

关键词:报表、单元格合并

一、需求

如下数据,要求在物料数据相同的情况下,相同的单价值的单元格进行合并

image.png

二、思路与方案

在报表表单插件的setMergeColums(List<String> columns)方法中,把需要合并的列(单价)添加到columns集合中,然后再遍历物料列的数据,当物料前行数据和上一行数据不一样时,取消单价列该行与上一行的合并

三、实现过程

public class OrderRptdemo extends AbstractReportFormPlugin implements Plugin {

    private static final String MERGECOLUM= "kded_pricefield";//合并单元格字段
    private static final String CONDITION_FIELD="kded_materielfield";//条件字段

    @Override
    public void setMergeColums(List<String> columns) {
         columns.add(MERGECOLUM);
        super.setMergeColums(columns);
    }

    @Override
    public void packageData(PackageDataEvent packageDataEvent) {
        ReportColumn c = (ReportColumn)packageDataEvent.getSource();
        //当前读取的列
        String fieldKey = c.getFieldKey();
        if (fieldKey.equals(CONDITION_FIELD)){
            //某列某行单元格的数据
            String s = packageDataEvent.getFormatValue().toString();
            //获取上一行数据
            String condition_prevalue = this.getPageCache().get("srstatusa_prevalue");
            if (condition_prevalue==null||condition_prevalue.isEmpty()){
                ;
            }else if (!condition_prevalue.equals(s)){
            //设置取消某列当前行与上一行的合并
                packageDataEvent.getNoMergeKey().add(MERGECOLUM);
            }    
            //把当前物料所在单元格数据保存到页面缓存中
            this.getPageCache().put("srstatusa_prevalue",s);
        }
        super.packageData(packageDataEvent);
    }
}

四、效果图

预览报表,效果图如下:4-7行的单价合并,第3行的单价和第4-7行的单价不合并,

image.png

五、开发环境版本

V5.0.012

六、参考资料


开发平台

学习成长中心

SDK接口

开发必备100个小知识

开发案例库



赞 10