文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

大数据中怎么对报表数据添加目录

2023-06-04 05:49

关注

小编今天带大家了解大数据中怎么对报表数据添加目录,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“大数据中怎么对报表数据添加目录”的知识吧。

需求描述:

在做一些类似 word 报告格式报表时,为了有更好的阅读效果,经常需要在首页增加一个目录导航页,这样就能够快速的知道关心的数据在第几页,但是报表不同于 word 文档,word 文档中格式都是固定的,所以能够方便快速的生成目录页,在报表中数据都是动态变化的,并且通常会涉及到动态扩展,这样很难固定目录项,并且由于数据动态扩展,对应的页码也很难精确获得,下面通过一个实例看下,如果在报表中动态增加目录。

解决方案:

报表数据是动态的,所以设计时就不能用固定的目录,需要报表计算后才能知道数据在第几页,润乾报表提供了一个报表计算侦听类,在 java 程序中可以动态获取报表计算后的结果,并能够在程序中动态更改单元格的值。

首先,看下报表模板的设计界面:

大数据中怎么对报表数据添加目录

这个报表要对订单数据按照地区进行汇总分析,并展示详细数据,要求目录中以地区为导航进行设置,报表前 5 行是目录页,第三行中,概要分析一般是固定的,这里就写了固定一行,页码设置 2 就行。

A4:=ds1.group(货主地区; 货主地区:1),表达式按照地区进行分组,也就是目录这块按照地区进行展示,对应 E4 单元格后续要设置成目录页,此处暂时为空。

A5:目录通常在第一页,所以此处设置一个行后分页

A7:就是一个固定的汇总描述,里边可以用字符串拼接方式将固定文本和动态数据拼接在一起展示。

A8:=ds1.group(货主地区; 货主地区:1),按照地区进行分组

A9:对该地区数据做一个汇总说明

A10:=ds1.select(订单 ID),取数订单数据,B10 往后依次类推。

将 A9,A10,A11,A12 单元格的左主格设置成 A8,此片数据根据 A8 进行纵向扩展,这样报表展示结果为:

大数据中怎么对报表数据添加目录

这里可以看到,目录项处列出了对应地区,接下来看下,如果给地区增加对应页码。

从报表结果中看到,第一页中的目录名称和报表中的地区名称相同,这样就可以根据这两个名称做匹配,判断如果名称相同获取数据区域的名称所在的页码,放到对应目录行就行,如数据区域的“东北”在第 2 页,那么目录中东北的页码应该为 2,接下来看下,如何给目录设置动态的页码。

这里就用到了之前说到的报表侦听类的使用,源码如下:

import com.raqsoft.common.Area;import com.raqsoft.report.usermodel.Context;import com.raqsoft.report.usermodel.IPagerListener;import com.raqsoft.report.usermodel.IReport;import com.raqsoft.report.usermodel.IReportListener;import com.raqsoft.report.usermodel.PageBuilder;import com.raqsoft.report.util.ReportUtils;public class createmulu implements IReportListener { public void afterCalc(Context arg0, IReport arg2) {  PageBuilder arg1 = null;try {arg1 = new PageBuilder(arg2);} catch (Throwable e1) {// TODO Auto-generated catch blocke1.printStackTrace();}System.out.println("报表总页数"+arg1.getPageCount());IReport p1;try { p1=arg1.getPage(1);//目录通常在第一页,所以获取第一页为目录页 int page=2;//设置数据初始循环页,通常为第二页 for(int i=3;i<=p1.getRowCount();i++){//目录行从第三行开始String muluName=(String)p1.getCell(i, 2).getValue() ;//报表中设置第二页为目录名称for(int j=page;j<=arg1.getPageCount();j++){//按照页数进行循环,分别取分页后每页报表对象for(int k=1;k<=arg1.getPage(j).getRowCount();k++){//每页中按照每行进行循环String mName=arg1.getPage(j).getCell(k,1).getValue() != null ? arg1.getPage(j).getCell(k,1).getValue().toString() : "";//本例中目录项在报表中的第一列,也就是A8单元格if(mName!="" && mName==muluName){//判断每页中的目录项和第一页中的目录名称是否相同arg2.getCell(i, 5).setValue(j);//如果相同,则设置目录页第5列对应的值为对应页码,注意,此处是arg2对象arg2.getCell(i, 5).setHyperlink("javaScript:toPage('report1',"+j+")");//设置超链接page=j;//为提高计算效率,下次在循环时,不用从第2页开始,从上次终端的页码开始就行break;//找到页码,跳出此处循环,提高效率}}}  }} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}    }    public void beforeCalc(Context arg0, IReport arg1) {    } }

核心思路就是在类中根据名称进行匹配,获取页码,放到对应单元格中,将编译好的类放到报表类路径中,如:应用的 WEB-INF\classes 下,注意如果有包路径,此处要要带相应的路径,放置过去后重启应用,在页面端访问报表,结果如下:

大数据中怎么对报表数据添加目录

可以看到,目录后边会生成对应的页码,word 中目录有个功能点是,点击页码,能够快速跳转到对应的页数,报表中同样可以增加对应的功能,报表提供了一个跳转页数的 js 函数,toPage,在 java 类中,在对应的页码单元格设置了一个超链接,调用这个 js 就行:

arg2.getCell(i, 5).setHyperlink("javaScript:toPage('report1',"+j+")");

这样,在页面端点击页码,就能够快速跳转到对应页数,当然,此功能要求报表在页面端分页后才有效,否则无法跳转,并且如果导出到 word 的话,只能显示页数,无法跳转。

通过这个例子可以看到,通过拿目录项中的单元格数据和数据表中的单元格进行匹配,来获取页码,但是在实际使用中,目录页中的目录名称和报表中的数据名称可能并不完全一致,比如目录页中叫东北,报表数据中叫东北地区,很难严格匹配,这样可以换种变通的方法,报表单元格属性栏中有个注释属性,可以在这个里边写上和目录项匹配的值,然后 java 类中可以根据这个属性的值做匹配,这样能够实现更加灵活的效果。

感谢大家的阅读,以上就是“大数据中怎么对报表数据添加目录”的全部内容了,学会的朋友赶紧操作起来吧。相信编程网小编一定会给大家带来更优质的文章。谢谢大家对编程网网站的支持!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯