使用 ReportLite 外部库生成有格式报表

esProc 不仅可以做数据准备和计算,还可以调用 ReportLite 外部库来生成有复杂格式的报表。

环境配置

ReportLite 下载及安装

ReportLite 官网下载,解压缩后直接安装,安装后自带试用授权,可以直接使用。

配置外部库

在【esProc 安装目录】\esProc\ 下新建 extlib\ReportLiteCli 目录(也可以将 ReportLiteCli 放到其他目录下,在 esProc 工具中设置时能找到相应目录就行)

将下面这些 jar 包 从 (【ReportLite 安装目录】\reportlite\lib) 复制到【esProc 安装目录】\esProc\ 下新建的 extlib\ReportLiteCli 中:

jboss-servlet-api_3.1-1.0.0.jar
esproc-ext-********.jar
htmlparser-1.6.jar
pdfbox-2.0.27.jar
fontbox-2.0.27.jar
graphics-box2.0.27.jar
mail-1.4.4.jar
reportlite.jar
scu-reportlite-cli-2.10.jar

启动 esProc,在菜单栏中选择【Tool】-【Options】-【Environment】,进入如下界面:

imagepng

点击【External library directory】后的【Browse】按钮进入选择外部库界面,如下图所示:

imagepng

选择外部库文件夹所在的目录 extlib 并勾选【ReportLiteCli】。

点击【OK】并重启 esProc。

配置文件

【ReportLite 安装目录】\reportLite\config 下的 raqsoftConfig.xml,这个文件中可以配置数据源连接、报表模板根目录等信息。本文例子使用 esProc 安装后自带的配置文件(【esProc 安装目录】\config 下的 raqsoftConfig.xml),可直接使用。如需要个性化设置,可将 ReportLite 自带的 raqsoftConfig.xml 放到本机其他目录进行修改,然后 esProc 中读取配置文件时读取新的配置文件就行。

本文案例均在 Windows 下完成,所涉及到的 xls、报表文件均放到了 E 盘,实际使用时可以根据自身情况自行设置,只需要在报表设计、esProc 读取所涉及到的目录的地方根据实际需要进行替换就行。

一个简单的例子

用如下 xls 文件中的数据:
imagepng
生成如下 xls 文件:
imagepng

报表模板设计

数据集设置

启动 ReportLite, 新建报表并设置报表中用到的数据:ReportLite 工具栏—”Report”—”Dataset”—”Add”—”File dateset”,选择要用的 xls 文件。
imagepng

imagepng

Name 列的 ds1 是自动产生的,表示 xls 读入到 ReportLite 的名称,在报表模版中用这个名称设置单元格与数据的绑定关系。在 esProc 脚本中可以根据这个名字对报表中的数据进行替换。

报表模板

imagepng

ReportLite 采用类 Excel 的设计方式,单元格命名以及一些常规公式和 Excel 中是保持一致的,A3 单元格中写入公式 =ds1.select(EID),表示从 ds1 中取 EID 列的数据,查看报表结果时会根据数据文件中的数据自动填充。其余格子直接用 ds1. 列名方式直接相应的列数据就行了。

格子的字体颜色、填充颜色、合并单元格等,操作方式和 Excel 中基本一样,按照要求设置就行了。
报表文件保存到 E 盘,命名为 "employee.rptx"。

SPL 脚本

启动 esProc 并编写如下脚本:

A
1 =file("E:/employee.xlsx").xlsimport@t()
2 >reportlite_config("config/raqsoftConfig.xml")
3 =reportlite_open("E:/employee.rptx")
4 =reportlite_run(A3;A1:"ds1")
5 =reportlite_export@xn(A3,"E:/empreport.xlsx")

A1:读取 employee.xlsx 转换成 SPL 中的序表。
A2:读取配置文件信息。
A3: 读取报表文件。
A4:运算报表,将 A1 的数据作为报表中 ds1 数据集的结果集。
A5:将结果生成 xls 文件放到 E 盘。

结果

打开 E 盘下的 empreport.xlsx 查看结果:

imagepng

其他文件数据源(txt、csv)

上个例子中 SPL 脚本读取的数据和报表数据集中用的是同一个 xls 文件,实际使用时可以用不同的 xls 文件,或者可以用其他类型的文件数据,只需要数据结构和报表数据集中的一致就行。

txt 数据

imagepng
报表模版使用 employee.rptx

SPL 脚本
A
1 =file("E:/employee.txt").import@t()
2 >reportlite_config("config/raqsoftConfig.xml")
3 =reportlite_open("E:/employee.rptx")
4 =reportlite_run(A3;A1:"ds1")
5 =reportlite_export@xn(A3,"E:/empreport1.xlsx")
结果

imagepng

csv 数据

imagepng

SPL 脚本
A
1 =file("E:/employee.csv").import@t(;,",")
2 >reportlite_config("config/raqsoftConfig.xml")
3 =reportlite_open("E:/employee.rptx")
4 =reportlite_run(A3;A1:"ds1")
5 =reportlite_export@xn(A3,"E:/empreport2.xlsx")
结果

数据库数据

SPL 脚本

A
1 =connect("demo")
2 =A1.query("select * from EMPLOYEE where gender='F'")
3 >reportlite_config("config/raqsoftConfig.xml")
4 =reportlite_open("E:/employee.rptx")
5 =reportlite_run(A4;A2:"ds1")
6 =reportlite_export@xn(A4,"E:/empreport2.xlsx")
7 >A1.close()

结果

imagepng

多种导出格式

在 SPL 中,不仅能将结果生成 xls 格式,还能生成多种其他不同格式文件,如 pdf、doc、html 等。

SPL 脚本

A
1 >reportlite_config("config/raqsoftConfig.xml")
2 =reportlite_open("E:/employee.rptx")
3 =reportlite_run(A2)
4 =reportlite_export@xn(A2,"E:/empreport.xlsx")
5 =reportlite_export@d(A2,"E:/empreport.docx")
6 =reportlite_export@p(A2,"E:/empreport.pdf")
7 =reportlite_export@h(A2,"E:/empreport.html")

结果

imagepng

使用参数

有如下销售数据的 xls 文件:

imagepng

生成如下格式结果:

imagepng

xls 中包含了所有销售数据,生成的结果要求按照不同的维度统计数据,并且每个 States 的数据单独放到一个 xls 文件中。

报表模板设计

数据集设置

新建报表并设置报表中用到的数据:ReportLite 工具栏—”Report”—”Dataset”—”Add”—”File dateset”,选择要用的 xls 文件。

imagepng

imagepng

参数设置

ReportLite 工具栏—”Report”—”Parameter”—”Add”

imagepng

Name 中的 States 是参数名称,通过它接收外部传过来的参数。

报表模板

imagepng

A4:按照 City 纵向分组拉伸,B2 按照 Category 横向拉伸,交叉区域对 Amount 求和汇总以及计数操作。
A1:=States+"Sales Data Summary",将 States 参数和后边的固定信息拼接在一起。

报表文件保存到 E 盘,命名为 "sales.rptx"。

SPL 脚本

A B
1 =file("E:/sales1.xlsx").xlsimport@t()
2 >reportlite_config("config/raqsoftConfig.xml")
3 =reportlite_open("E:/sales.rptx")
4 =A1.group(States)
5 for A4 =reportlite_run(A3,A5.States:"States";A5:"ds1")
6 =reportlite_export@xn(A3,"E://salesdata//"+A5.States+"salesdata.xlsx")

A4:对 A1 的数据按照 States 分组
A5:按照 A4 分组结果循环
B5:将 A5.States 传给报表的 States 参数,将 A5 作为报表中 ds1 数据集的结果集。
B6:导出 xls 保存到 E://salesdata 下,并在 xls 名字上拼上对应的 States 名字。

结果

imagepng

imagepng