分栏报表制作攻略

2023-10-17 11:58
文章标签 制作 报表 攻略 分栏

本文主要是介绍分栏报表制作攻略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、分栏的意义

我们常常会遇到一些列数很少行数很多的报表,这种报表窄窄长长,打印在一张 A4 纸上,横向留出大片空白;或者行数很少,列数很多的报表,打印在 A4 纸上,纵向留出大片空白·····这些情况下不但浪费张纸而且不美观,不方便用户查阅。

为了解决这种问题,我们提出了分栏的解决方案,把数据按照一定的规则分栏分块的显示在纸张上。下面我们来具体看一下润乾报表是如何解决分栏问题的。

二、分栏的实现方法

我们吧分栏大致分为三类:卡片分栏、行分栏、列分栏。我们按照分类看下不同类别下应该如何实现分栏效果。

2.1 卡片分栏

2.1.1 卡片分栏效果图

imagepng

2.1.2 卡片分栏实现步骤

1. 绘制卡片报表,如下图所示:

imagepng

卡片式报表绘制时,注意主格的设置:选中 A 列设置左主格为 B2。

这样才能保证报表数据在展现时的分块效果。

2. 设置报表分栏属性

在报表—报表属性—分页配置页面中设置分栏数,如下图所示:

imagepng

分栏数的配置规则是:纸张的宽度 / 报表的宽度。这样能保证最大程度利用纸张且保证数据展现的效果。

至此,我们就配置完成了卡片分栏报表。在润乾报表中,我们只需要设置下分栏数就可以实现卡片报表的分栏效果。

注意事项:分栏报表中不允许存在隐藏行;尽量避免在第二栏中涉及自动换行撑大单元格的情况。

2.2 行分栏

2.2.1 行分栏效果图

行分栏也叫做横向分栏,也就是把数据行按照一定的规则拆到不同的栏中。

imagepng

2.2.2 实现方法

这里有两种实现方法,一种是在报表单元格中通过表达式拆分,另外一种则是在数据集中吧数据拆分好。

方法一:to()+valueat() 函数实现分栏

数据集 ds1 直接从数据库表中取数,sql 语句是:

SELECT 编号, 部门, 姓名 FROM 员工表

重点在于单元格表达式的拆分处理。

imagepng

其中,A5 单元格表达式:=to(0,ds1.count()/3),报表要分成三栏,所以我们要算出来每一栏要对应多少行数据。

B5 单元格表达式:=valueat(ds1.select( 编号),3*A5),从数据集集合中取出对应行的记录,按照三倍的规律取对应位置的数据返回。

依次类推,F5 单元格表达式为:=valueat(ds1.select( 编号),3*A5+1)

J5 单元格表达式为:=valueat(ds1.select( 编号),3*A5+2)

PS:valueat 函数的取值从 0 开始。

此方法有一个缺点:当数据量比较多的时候,valueat 的取数性能会相对降低。

方法二:集算器脚本实现分栏

为了解决方案 1 在大数据量下的性能问题,我们把数据的拆分处理在数据集中完成,在润乾报表中我们可以使用脚本数据集来实现这一过程。

首先,在集算器设计器中进行脚本的取数调试,脚本配置如下:

imagepng

其中,A1:=connect(“demo”) 表示连接 demo 数据库;

A2:=A1.query(“SELECT 编号, 部门, 姓名 FROM 员工表”) 表示从 demo 数据库中取出员工表的数据;

A3:=A2.step(3,1) 表示每三条记录取第一条;

B3:=A2.step(3,2)|[null] 表示每三条记录取第二条;

C3:=A2.step(3,3)|[null] 表示每三条记录取第三条;

A4:=A3.derive(B3(#). 编号: 编号 2,B3(#). 姓名: 姓名 2,B3(#). 部门: 部门 2,C3(#). 编号: 编号 3,C3(#). 姓名: 姓名 3,C3(#). 部门: 部门 3) 表示吧三部分的数据整合到一起,组合成一个完整的数据集返回。

然后,在报表中新增集算器类型数据集,并加载编辑好的脚本文件,如下图所示:

imagepng

最后,按照常规报表取数生成报表文件:

imagepng

这种方法的优先在于,可以更加方便的对数据进行处理,在处理过程中不依赖数据库,而且也最大程度上减少了单元格的二次计算处理,提升了报表的性能。

2.3 列分栏

2.3.1 列分栏效果图

当列数比较多,需要强制折行到下一行显示时,就是对应我们常说的列分栏需求。

imagepng

2.3.2 列分栏实现步骤

实现的原理是,我们把数据按照一定的规则强制设置换行,比如上图的需求,需要每行显示六列数据,那么我们只需要按照这个规则算好需要分几行,然后吧数据填充进去就可以了,具体单元格表达式配置如下:

imagepng

其中,A1:=ds1.count(),用于计算此数据集内的数据个数。

A2:=to(1, int(A1)/6+1),作为强制分行的扩展基础,int(A1)/6+1 用于计算一共需要扩展的行数,其中”6″是每行的数据列数

B2:=(A2-1)*6,是每行的基数。

D1:=if(A1<6,to(1,A1),to(1,6))  ,控制显示为 6 列数据, 数据够 6 列就换行

D2:=ds1.select(name, #0==D1+B3,1) ,其中 D1+B3 分别递增,达到与每个行号进行匹配的目的,#0 表示取对应记录的行号。

D3:=ds1.select(price,rownum==D1+B3,1)

至此,就实现了列分栏的需求。

三、总结

简单的分栏需求,我们可以直接通过润乾报表设置栏数实现效果。

复杂的分栏需求实现时,先明确分栏的规则,然后用报表工具内置的函数或者配置实现这个规则,最后填充数据。有润乾报表在,你的想法我来实现。

详情链接:http://c.raqsoft.com.cn/article/1569571919215?r=gxy

这篇关于分栏报表制作攻略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/225218

相关文章

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

多线程解析报表

假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。 Way1 join import java.time.LocalTime;public class Main {public static void main(String[] args) thro