报表按条件设置单元格融合原创
金蝶云社区-周立思
周立思
5人赞赏了该文章 1,616次浏览 未经作者许可,禁止转载编辑于2023年02月24日 15:59:57
summary-icon摘要由AI智能服务提供

文本讨论了如何在大数据量报表中,根据多个字段的组合条件设置单元格融合的需求、思路、实现过程及注意事项。初期平台仅支持相同值融合,通过零宽度字符实现按分组条件融合。后平台支持自定义融合,提出了通过比较多字段值并利用DataSet的preRowValue()函数判断是否融合的新思路,并给出了MapFunction类的实现示例和packageData()中的设置方法。还提醒报表列表需包含特定字段,并提供了相关参考资料链接。

一、需求

        报表某个金额字段按照报表多个字段组合条件设置单元格融合,数据量较大。

二、思路

        2022年回答社区提问:问题需求是希望按照分组条件进行单元格融合(https://developer.kingdee.com/questions/368779787076477696/answers/370627551666134528?productLineId=29  )。当时平台只支持单元格按照相同值融合,给出的解决方案利用了零宽度字符实现了按分组条件进行融合。后续12月份平台支持自定义单元格融合可以行设置不融合单元格:https://developer.kingdee.com/article/311516534676030464?productLineId=29&isKnowledge=2  。

        根据平台补丁支持的部分行设置不融合和 PackageDataEvent.getNoMergeKey() 设置的是当前行不与上一行进行融合,数据量较大如果只在packageData() 处理比较慢,想到另外一个思路:

  1. 将多字段的值比较组装成字符串,利用DataSet的 preRowValue()函数判断和上一行是否是相同条件。

  2. 报表查询插件 DataSet 增加新字段(字符串类型,存储的是当前行需要设置不融合的字段集合(用逗号拼接),为空表示当前行不需要设置不融合)。


三、实现过程

利用MapFunction类实现多字段值进行判断

image.png

MapFunction类:下图示例代码中仅进行了 String.join() 用逗号拼接成字符串赋值字段 no_merge_compare 进行比较。

image.png

利用 preRowValue() 函数判断行是否设置不融合,如果和上一行比较字段的值相同则赋值空,否则赋值不融合字段用逗号拼接的字符串。如下图示例代码:

image.png

报表表单插件 packageData() 设置行不融合单元格,如下图示例代码:

image.png


四、效果图

image.png


五、开发环境版本

v5.0.011


六、注意事项

报表列表需要包含示例代码中字段 no_merge_fields ,可以隐藏不显示,否则 PackageDataEvent.getRowData() 无法获取字段 no_merge_fields 的值。

七、参考资料

  1. 报表新增单元格融合功能:https://developer.kingdee.com/article/311543846003545856?productLineId=29&isKnowledge=2 

  2. 报表设置单元格融合:https://developer.kingdee.com/article/311516534676030464?productLineId=29&isKnowledge=2 (支持部分行设置不融合)

图标赞 5
5人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0