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

在数据处理时,有时要把查询、分析计算、统计、数据采样等各种渠道得来的结构化数据,用程序自动生成各种格式的Excel文件。本文将分别针对单纯导出数据、导出大量数据、指定显示属性、固定行列填充、动态条件显示属性、分组带明细及统计、交叉统计表等介绍实现方法,并提供用 esProc SPL 编写的代码示例。esProc 是专业的数据计算引擎, SPL 中有完善的 Excel 文件导出函数,将结构化数据导出成 Excel 非常方便。本文不探讨要导出的数据如何得来,假设它已经存在一个文本文件里了。1.  单纯导出数据1.1  导出新文件将列名导出到Excel文件的第一行,第二行开始导出数据记录,每行一条记录。示例:将订单表数据导出到一个新的Excel文件orders.xlsx,esProc SPL脚本如下:A注释1=file("e:/txt/orders.txt":"UTF-8").import@t()  读入文本数据2=file("e:/excel/orders.xlsx").xlsexport@t(A1)  导出Excel文件,@t表示将列名导出到第一行导出时如果文件不存在,会自动创建文件。函数xlsexport的参数中,可以指定需要导出的列,本例中没有指定,则导出所有的列;还可以指定导出数据的sheet名字,本例没有指定,则导出到第一个sheet中。导出后的orders.xlsx部分数据如下图所示:

1.2  追加数据Excel文件已经存在,要将新的数据追加在已有数据的后面。此时只需要追加数据记录,不用再导出列名了。示例:将今日新增加的订单表数据追加到原有的orders.xlsx中,esProc SPL脚本如下:A注释1=file("e:/txt/aday.txt":"UTF-8").import@t()  读入文本数据2=file("e:/excel/orders.xlsx").xlsexport@a(A1)  @a表示将数据追加到原文件之尾1.3  导出到指定 Sheet导出数据时,指定保存数据的Sheet的名称。示例:将来自Shantai公司的订单表数据导出到orders.xlsx文件里名为Shantai的Sheet中。本例中只导出指定的列数据,并修改某些列名,esProc SPL脚本如下:A注释1=file("e:/txt/orders.txt":"UTF-8").import@t()  读入文本数据2=A1.select(Company==“Shantai")  过滤出Shantai公司数据3=file(“e:/excel/orders.xlsx”).xlsexport@t(A2,ID,Company,OrderDate:Date,Amount:Money;”Shantai")  导出ID、Company、OrderDate、Amount四列,并将OrderDate改名为Date,Amount改名为Money,数据导出到名为Shantai的sheet中导出后的orders.xlsx部分数据如下图所示:

2.  导出大量数据当有大量的、不能一次性全部载入内存的数据需要导出时,要用游标分批读入数据,再用流的方式将数据写入OpenXml格式(即扩展名为xlsx)的Excel文件,只需占据少量内存。Excel限制一个sheet最多只能存放1048576行数据,所以当导出数据行数超过此限制时,我们需要新增加一个sheet来保存。示例:将大数据订单表导出到big.xlsx文件中,esProc SPL脚本如下:A注释1=file("e:/txt/big.txt":"UTF-8").cursor@t()  用游标读文本数据2=file("e:/excel/big.xlsx").xlsexport@st(A1)  @s表示用流式导出导出后的big.xlsx最后几行数据如下图所示:

本例中导出了123663条数据记录,其实用这种方式可以导出任意条记录(不过得保证硬盘存储空间充足)。3.  指定显示属性除了直接导出数据,有时还希望生成的excel文件能够显示得比较美观,比如可以指定字体、颜色、背景色、对齐方式、显示格式等。这时需要预先建好这个excel文件(模板),定义好需要的这些显示属性,然后再向这个文件中导出数据,定义好的显示属性就会随之呈现。示例:把订单表数据导入到orders.xlsx中,并按如下图所示格式显示:

本例将多种预定义显示属性都集中在一起作示范,显示比较杂乱,仅仅为了演示功能,没有从美观上出发去设计。esProc SPL脚本与1.1节相同。导出后的Excel文件如下图所示:

4.  固定行列填充有一个行列数和单元格格式都固定的Excel文件,里面有些空单元格,需要把相关数据填写到这些格子里,这要求提供往单个单元格填写数据的功能。在数据填报业务中会经常用到。示例:某基金公司总公司向分公司下发了一张excel表格,要求分公司填入它的相关数据后回传给总公司,下发的excel文件如下:

esProc SPL脚本如下:ABCDEF1Mengniu Funds2017358.236430028.5502001004002003182.676.343.728.516.441201.07300.27900.85154646=file("e:/excel/result.xlsx")=A6.xlsopen()7=C6.xlscell("B2",1;A1)=C6.xlscell("J2",1;B1)=C6.xlscell("L2",1;C1)8=C6.xlscell("B3",1;D1)=C6.xlscell("G3",1;E1)=C6.xlscell("K3",1;F1)9=C6.xlscell("B6",1;[A2:F2].concat("\t"))=C6.xlscell("H6",1;[A3:E3].concat("\t"))10=C6.xlscell("B9",1;[A4:F4].concat("\t"))=C6.xlscell("B11",1;[A5:C5].concat("\t"))11=A6.xlswrite(C6)假定要填的数据已计算好(在前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脚本如下:A注释1=file("e:/txt/orders.txt":"UTF-8").import@t()读入文本数据2>report_config("e:/cfg/raqsoftConfig.xml")装载报表环境配置3=report_open("orders.rpx")打开设计的报表模板4=report_run(A3;A1:"ds1")将A1序表作为数据集ds1传递给报表A3进行计算5=report_exportXls@x(A3,"e:/excel/orders.xlsx")将计算后的报表对象A3导出成excel文件导出后的orders.xlsx如下图所示:

6.  分组带明细及统计导出Excel时,要求对数据进行分组,显示各组明细数据及统计数据。这同样需要用润乾报表工具作辅助。示例:将订单表数据导出到orders.xlsx中,要求按地区和公司分组,显示各组订单明细及订单金额总和。打开润乾报表设计器,新建报表模板“orders_group.rpx”,如下图所示。

报表的第一行是表名称,第二行是列名称,在A3格按货主地区进行分组,B3格按公司名称进行分组,C3、D3、E3显示订单明细。E4格统计各公司的订单金额总和,E5格统计各地区的订单金额总和。esProc SPL脚本如下:A注释1=file("e:/txt/orders.txt":"UTF-8").import@t()读入文本数据2>report_config("e:/cfg/raqsoftConfig.xml")装载报表环境配置3=report_open("orders_group.rpx")打开设计的报表模板4=report_run(A3;A1:"ds1")将A1序表作为数据集ds1传递给报表A3进行计算5=report_exportXls@x(A3,"e:/excel/orders.xlsx")将计算后的报表对象A3导出成excel文件导出后的orders.xlsx如下图所示:

7.  交叉表将数据导出成交叉表格式的Excel文件,仍然需要用润乾报表工具作辅助。示例:将订单表数据导出到orders.xlsx中,要求按地区和年份做交叉统计表显示。打开润乾报表设计器,新建报表模板“orders_cross.rpx”,如下图所示。

报表的第一行是表名称,B2格按订购日期的年份分组,A3格按货主地区分组,B3格统计各分组的订单金额总和。esProc SPL脚本如下:A注释1=file("e:/txt/orders.txt":"UTF-8").import@t()读入文本数据2>report_config("e:/cfg/raqsoftConfig.xml")装载报表环境配置3=report_open("orders_cross.rpx")打开设计的报表模板4=report_run(A3;A1:"ds1")将A1序表作为数据集ds1传递给报表A3进行计算5=report_exportXls@x(A3,"e:/excel/orders.xlsx")将计算后的报表对象A3导出成excel文件导出后的orders.xlsx如下图所示:

SPL CookBook》中有更多相关计算示例。

(0)

相关推荐

  • Excel数据源获取的常见错误解决办法

    嗨咯大家好,我是亮仔 今天我们来虚拟一个任务或者项目来作为制作数据可视化图表实例,逐步制作数据可视化分析报表,如果小伙伴没有基础也没关系,制作过程中用到的知识点我都会进行说明,知识点较多,制作的周期会 ...

  • “集算器”还是“计算器”?终于有了正确答案!

    关键词:集算器.Esproc.数据计算.数据处理.润乾信息 自从2015年开始,老贼在论坛上传出了"集算器"的一条信息后,技术网民就开始了热议. 随后在各种论坛.会议上就开始了很多 ...

  • Python pandas读取Excel文件

    excelperfect 标签:Python与Excel,pandas 要使用Python处理数据,首先要将数据装载到Python,这里使用Python pandas来读取Excel文件. panda ...

  • 使用Python对Excel多sheet合并与数据集读取

    使用Python对Excel多sheet合并与数据集读取

  • 测试!测试!测试!xlsx格式的Excel文件也可能存在问题!

    最近,因工作需要,从一个比较早期的系统中导出xlsx格式的数据,然后用PQ进行汇总,结果发现: - 坑!坑!坑!-   汇总的数据比原始数据少了很多! 原始数据共有24行 (含多余表头信息) 但PQ只 ...

  • 我的Excel书示例文件和操作动画下载地址

    有粉丝问我的Excel书<Excel高手捷径:一招鲜,吃遍天>示例文件和操作动画下载地址,在书的前言里分享了地址,这里再次分享给大家. 腾讯微云下载地址: http://url.cn/Zc ...

  • jsp生成复杂数据格式Excel文件

    package beans.excel;import java.io.IOException;import java.io.OutputStream;import java.util.Calendar ...

  • 一定要学!Excel文件未保存恢复的小技巧~

    如果不小心你的文件未保存,就被关闭了,可通过文件 - 信息 - 管理工作簿 - 恢复未保存的工作簿,来解决该问题. 打开最新的文件,点击另存为,即可解决. 在Excel当中,还有很多类似小技巧. 1. ...

  • 教学管理菜鸟成长记40-找不同下集之两个EXCEL文件的差异

    关键词:EXCEL2016:SpreadshCompare插件:EXCEL文件比较:操作难度***** 早上8点,二师兄准时开机,因为他知道小菜肯定又会一大早就紧急求助,果然事情的发展就如同睿智的二师 ...

  • 怎么把100多个EXCEL文件合并成一个

    2020-07-10·策划专员 可以通过更改excel代码来合并多个文件. 详细步骤: 1.新建一个文件夹. 2.将要合并的表格放到里面. 3.新建一个表格. 4.用excel打开. 5.右击Shee ...

  • 怎么在ppt里加入一个excel文件

    如何在PPT里加入一个excel文件呢?下面是具体的操作方法. 打开一个PPT文档. 单击工具栏上的插入. 单击选择附件. 在出现的插入对话框中,单击选中需要插入的excel文件. 单击打开即可在PP ...

  • 在两个Excel文件之间传递数据而无须打开Excel文件

    原创 范吉 完美Excel 2018-10-11 经常有人需要从关闭的工作簿文件中取值,省掉打开工作簿的操作.而此处介绍的技巧,所涉及到的工作簿文件都不需要打开,就可以完成将某工作簿文件中的数据迁移到 ...

  • 掀开面纱,看看Excel文件到底是什么

    引子:从Excel 2007开始,Microsoft采用了新的文件格式,称为开放的XML文件格式,很好地改进了文件和数据管理.数据恢复和可交互能力.现在,任何支持XML的应用程序都能访问和处理Exce ...