生成各类格式的 Excel 文件示例

【摘要】
本文介绍如何将经各类渠道得来的结构化数据自动生成各类格式的 Excel 文件,如单纯导出数据、导出大量数据、指定显示属性、固定行列填充、动态条件显示属性、分组带明细及统计、交叉统计表等,并用 esProc SPL 举例实现。请点击 生成各类格式的 Excel 文件示例 了解详情html

在数据处理时,有时要把查询、分析计算、统计、数据采样等各类渠道得来的结构化数据,用程序自动生成各类格式的Excel文件。函数

本文将分别针对单纯导出数据、导出大量数据、指定显示属性、固定行列填充、动态条件显示属性、分组带明细及统计、交叉统计表等介绍实现方法,并提供用 esProc SPL 编写的代码示例。esProc 是专业的数据计算引擎, SPL 中有完善的 Excel 文件导出函数,将结构化数据导出成 Excel 很是方便。本文不探讨要导出的数据如何得来,假设它已经存在一个文本文件里了。工具

1. 单纯导出数据

1.1 导出新文件

将列名导出到Excel文件的第一行,第二行开始导出数据记录,每行一条记录。字体

示例:将订单表数据导出到一个新的Excel文件orders.xlsx,esProc SPL脚本以下:大数据

导出时若是文件不存在,会自动建立文件。函数xlsexport的参数中,能够指定须要导出的列,本例中没有指定,则导出全部的列;还能够指定导出数据的sheet名字,本例没有指定,则导出到第一个sheet中。spa

导出后的orders.xlsx部分数据以下图所示:设计

1.2 追加数据

Excel文件已经存在,要将新的数据追加在已有数据的后面。此时只须要追加数据记录,不用再导出列名了。3d

示例:将今日新增长的订单表数据追加到原有的orders.xlsx中,esProc SPL脚本以下:excel

1.3 导出到指定 Sheet

导出数据时,指定保存数据的Sheet的名称。htm

示例:未来自Shantai公司的订单表数据导出到orders.xlsx文件里名为Shantai的Sheet中。本例中只导出指定的列数据,并修改某些列名,esProc SPL脚本以下:

导出后的orders.xlsx部分数据以下图所示:

2. 导出大量数据

当有大量的、不能一次性所有载入内存的数据须要导出时,要用游标分批读入数据,再用流的方式将数据写入OpenXml格式(即扩展名为xlsx)的Excel文件,只需占据少许内存。Excel限制一个sheet最多只能存放1048576行数据,因此当导出数据行数超过此限制时,咱们须要新增长一个sheet来保存。

示例:将大数据订单表导出到big.xlsx文件中,esProc SPL脚本以下:

导出后的big.xlsx最后几行数据以下图所示:

本例中导出了123663条数据记录,其实用这种方式能够导出任意条记录(不过得保证硬盘存储空间充足)。

3. 指定显示属性

除了直接导出数据,有时还但愿生成的excel文件可以显示得比较美观,好比能够指定字体、颜色、背景色、对齐方式、显示格式等。这时须要预先建好这个excel文件(模板),定义好须要的这些显示属性,而后再向这个文件中导出数据,定义好的显示属性就会随之呈现。

示例:把订单表数据导入到orders.xlsx中,并按以下图所示格式显示:

本例将多种预约义显示属性都集中在一块儿做示范,显示比较杂乱,仅仅为了演示功能,没有从美观上出发去设计。esProc SPL脚本与1.1节相同。

导出后的Excel文件以下图所示:

4. 固定行列填充

有一个行列数和单元格格式都固定的Excel文件,里面有些空单元格,须要把相关数据填写到这些格子里,这要求提供往单个单元格填写数据的功能。在数据填报业务中会常常用到。

示例:某基金公司总公司向分公司下发了一张excel表格,要求分公司填入它的相关数据后回传给总公司,下发的excel文件以下:

esProc SPL脚本以下:

假定要填的数据已计算好(在前5行)。样表中前6个要填的单元格都是独立的,因此只能每次填一个格,第6行有连续填写的单元格,此时把待填数据拼成以\t分隔的字符串,这样能够从指定单元格开始顺序填充。数据填完之后,再把C6的Excel对象写回到result.xlsx文件中。

填写完成之后的result.xlsx以下图所示:

5. 动态条件的显示属性

导出Excel时,要求单元格的显示属性是根据条件动态变化的,好比要隔行显示不一样的背景色、单元格颜色或字体与数据值相关等。这种状况须要提供一种能定义显示属性条件表达式、并在导出时能计算表达式的值来获得显示属性的工具,在esProc SPL中,这种工具就是润乾报表。

示例:将订单表数据导出到orders.xlsx中,要求数据行的背景色以两种颜色隔行交替显现,订单金额大于2000的用红色显示,低于500的用绿色显示。

打开润乾报表设计器,新建报表模板“orders.rpx”,以下图所示。

报表的第一行是表名称,第二行是列名称,第三行是数据记录行,如何制做报表能够参阅润乾报表的相关教程。

选中第三行的全部单元格,在背景色表达式中填入:if(row()%2==0,-853778,-1),用来指定交替显示的两种背景色。选择第三行最后一个单元格,指定显示格式为#.00,在前景色表达式中填入:if(value()>2000,-65536,if(value()<500,-16711936,-16777216)),指定根据不一样金额显示不一样的字体颜色。

esProc SPL脚本以下:

导出后的orders.xlsx以下图所示:

6. 分组带明细及统计

导出Excel时,要求对数据进行分组,显示各组明细数据及统计数据。这一样须要用润乾报表工具做辅助。

示例:将订单表数据导出到orders.xlsx中,要求按地区和公司分组,显示各组订单明细及订单金额总和。

打开润乾报表设计器,新建报表模板“orders_group.rpx”,以下图所示。

报表的第一行是表名称,第二行是列名称,在A3格按货主地区进行分组,B3格按公司名称进行分组,C三、D三、E3显示订单明细。E4格统计各公司的订单金额总和,E5格统计各地区的订单金额总和。

esProc SPL脚本以下:

导出后的orders.xlsx以下图所示:

7. 交叉表

将数据导出成交叉表格式的Excel文件,仍然须要用润乾报表工具做辅助。

示例:将订单表数据导出到orders.xlsx中,要求按地区和年份作交叉统计表显示。

打开润乾报表设计器,新建报表模板“orders_cross.rpx”,以下图所示。

报表的第一行是表名称,B2格按订购日期的年份分组,A3格按货主地区分组,B3格统计各分组的订单金额总和。

esProc SPL脚本以下:

导出后的orders.xlsx以下图所示:

《SPL CookBook》(http://www.raqsoft.com.cn/wx/...)中有更多相关计算示例。

相关文章
相关标签/搜索