有时我们需要用程序来自动生成Excel文件,但Excel本身带的VBA并不好用,而集算器作为数据处理工具实现这个需求就会方便很多。本文将介绍如何用集算器生成Excel文件,而集算器本身强大的数据计算能力不是本文重点,因此文中只是简单地用文本作为数据源举例,实际应用中可能会从各种各样的数据源中取数,再经过一系列运算得到需要导出的数据。
本文中用到的函数请参看集算器文档《函数参考》。

基础篇

1. 单纯导出数据

1.1 导出新文件

这个例子中,A1单元格读入文本格式的某企业订单表,用来模拟可能通过计算得到的数据。A2中的表达式是将A1的数据导出到orders.xlsx文件中(如果文件不存在,程序运行时会自动创建)。例子中导出函数xlsexport参数中没有指定x和F,因此将导出A1中的所有字段,同时保持字段名不变。由于没有指定参数s,所以会导出到sheet1中。而函数使用了选项@t,因此会将字段名导出到第一行。

  A
1 =file(“orders.txt”:”UTF-8″).import@t()
2 =file( “orders.xlsx” ).xlsexport@t( A1 )

下图中就是导出的excel文件:

1.2 追加数据

假如某企业需要将每天的新订单追加到已经存在且有往日数据的orders.xlsx文件中,那么应该怎么做呢?与上例类似,在A1中是要追加的某日订单数据,数据结构保持相同,在A2中导出时不要加函数选项@t,因为文件中已有标题,只需导出数据。由于文件已存在,因此会自动追加在原来数据的后面。

  A
1 =file(“aday.txt”:”UTF-8″).import@t()
2 =file( “orders.xlsx” ).xlsexport( A1 )

1.3 导出到不同sheet

假如想对订单中针对山泰企业的订单作特殊关注,要将其数据的某些字段导出到专门的一个sheet中,又该如何进行呢?

可以在A2单元格中,对序表A1进行过滤,只选出公司名称为山泰企业的数据记录,在A3中将新序表A2导出到orders.xlsx中,只导出订单ID、公司名称、订购日期、订单金额四个字段,并将订购日期改名为日期,订单金额改名为金额,数据导出到一个名为山泰企业的新sheet中。对应的脚本修改如下:

  A
1 =file(“orders.txt”:”UTF-8″).import@t()
2 =A1.select(公司名称==”山泰企业”)
3 =file( “orders.xlsx” ).xlsexport@t(A2,订单ID,公司名称,订购日期:日期,订单金额:金额;”山泰企业” )

下图是导出结果:

2. 导出大量数据

如果数据量很大时又该怎么办?

集算器提供了游标来处理数据量很大的情况,游标在读取数据时从前向后遍历一次,逐条从数据源读取数据,并不是一次将所有数据读入内存,因此不会受到内存不足的限制。而且,集算器游标不仅可以应用于数据库,还可以应用于数据文件或者内存排列。

本例中A1打开了文件游标,A2中将游标所指的大数据导出到big.xlsx文件中。在用游标导出时,要添加@s这个函数选项,这样在导出时就会以流式导出,产生的excel结果文件也不会占用在内存中。

  A
1 =file(“big.txt”:”UTF-8″).cursor@t()
2 =file(“big.xlsx”).xlsexport@st( A1 )

下图是本例的导出结果,本例中导出了130727条数据记录。事实上我们可以导出上亿条记录也不在话下,不过excel文件的一个sheet最多只能存放1048576行数据,所以当导出数据超过百万行时,会在excel中新增一个sheet来保存。

3. 指定显示属性

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

如下图所示,我们在orders.xlsx文件sheet1的第一行写上表格名称,在第二行写上字段列名,并对表名和各列定义一些样式属性,第1、3、4列中间对齐,第2列左对齐,第5列右对齐,第4列显示格式为“yyyy年mm月dd日”,第5列显示格式为“#,###.00”。

集算器导出程序与本文第1例相同,导出结果如下图所示。在导出到已有文件时,会将文件的最后一个非空行当作表头,用导出的表头覆盖此行。导出时会使用原文件中定义的各种样式属性(大数据流式导出时不支持)。

4. 固定行列填数据

集算器里还提供了读写excel文件中指定的某单元格或某区块单元格的方法,这个功能在用excel作数据填报时非常有用。举个例子,比如某基金公司总公司向分公司下发了一张excel表格,要求分公司填入它的相关数据后回传给总公司,下发的excel文件如下:

对于这样的填报表,由于每个季度都需向总公司填报,如果写一个集算器程序首先算出要填的单元格的数据,然后调用函数自动填入对应的格子,将会是非常省事又方便的办法。

这个例子的脚本dfx文件如下图所示,假定要填的数据都算出来了,前5行是依次要填的数据。

样表中前6个要填的单元格都是独立的,所以只能每次填一个格,第6行是可以连续填写的单元格,此时就把要填的数据拼成以\t分隔的字符串,可以同行中按顺序填入。数据全部填写完以后,再把C6打开的excel对象写回到hb.xlsx文件中。

  A B C D E F
1 猛牛基金 2017 58.2 364 300
2 8.5 50 200 100 400 200
3 182.6 76.3 43.7 28.5 16.4  
4 120 1.07 30 0.27 90 0.8
5 154 6 4      
6 =file(“hb.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)      

下图即是完成填报后的excel文件内容:

高级篇

导出需求有时会非常复杂,比如导出时需要隔行显示不同的背景色、单元格颜色与数据值动态相关、用导出数据画统计图、对导出数据进行分组统计、多维交叉表等等。集算器如何实现这些复杂的导出需求呢?

别急!集算器里还有高级兵器库——外部库,其中的润乾报表5就可以实现导出excel的复杂功能(也可以导出pdf和word)。如何部署外部库功能请参看《外部库使用指南》(下载地址:http://c.raqsoft.com.cn/article/1532597958129),集算器中以report_开头的系列函数就是实现此功能的。

1. 动态条件的显示属性

下面来看一个导出订单表的例子,导出需求:数据行的背景色以两种颜色隔行交替显现,订单金额大于2000的用红色显示,低于500的用绿色显示。

实现步骤:

1、打开润乾报表5设计器,新建报表模板“订单表.rpx”,截图如下。

新建报表数据集ds1,这个数据集只用于从集算器接收导出的序表数据,所以只需指定数据集名称。报表的第一行是表名称,第二行是要导出的列名称,第三行是数据记录行,数据记录的具体写法可以参阅润乾报表的相关教程。

选中第三行的所有单元格,在背景色表达式中填入:if(row()%2==0,-853778,-1),用来指定交替显示的两种背景色。

选择第三行最后一个单元格,指定显示格式为#.00,在前景色表达式中填入:if(value()>2000,-65536,if(value()<500,-16711936,-16777216)),指定根据不同金额显示不同的字体颜色。

2、打开集算器设计器,新建dfx文件如下:

  A
1 =file(“orders.txt”:”UTF-8″).import@t()
2 >report_config(“E:\\work\\raqsoftReport\\raqsoftConfig.xml”)
3 =report_open( “订单表.rpx” )
4 =report_run(A3;A1:”ds1″)
5 =report_exportXls@x(A3,”rpt.xlsx”)

A1中读入要导出的序表数据;

A2中进行报表环境的配置,主要是配置报表主目录以及授权文件;

A3中打开我们刚才设计的报表模板;

A4中将A1中的序表作为数据集ds1对传递给报表对象A3进行计算;

A5中将计算后的报表对象A3导出成excel文件。

3、运行上面的dfx文件,得到导出的excel文件如下:

2. 分组带明细及统计

Excel中根据数据的层次进行分组和明细的显示也是一个非常常见的需求,这里我们就针对这个需求,看看集算器是怎么处理的:

1、打开润乾报表5设计器,新建报表模板“订单统计表.rpx”,截图如下。

同上例类似,建立数据集ds1,在A3格按货主地区进行分组,B3格按公司名称进行分组,C3、D3、E3显示订单明细。E4格统计各公司的订单金额总和,E5格统计各地区的订单金额总和。

2、打开集算器设计器,新建dfx文件如下:

  A
1 =file(“orders.txt”:”UTF-8″).import@t()
2 >report_config(“E:\\work\\raqsoftReport\\raqsoftConfig.xml”)
3 =report_open( “订单统计表.rpx” )
4 =report_run(A3;A1:”ds1″)
5 =report_exportXls@x(A3,”rpt.xlsx”)

3、运行这个dfx文件,得到导出的excel如下图:

3. 交叉统计表

同样,交叉统计表也是十分常见的表格之一,集算器加润乾报表,也可以完美实现将数据导出到Excel中的交叉统计表中:

1、打开润乾报表5设计器,新建报表模板“订单交叉表.rpx”,截图如下。

同上例类似,建立数据集ds1,B2格按订购日期的年份分组,A3格按货主地区分组,B3格统计各分组的订单金额总和。

2、打开集算器设计器,新建dfx文件如下:

  A
1 =file(“orders.txt”:”UTF-8″).import@t()
2 >report_config(“E:\\work\\raqsoftReport\\raqsoftConfig.xml”)
3 =report_open( “订单交叉表.rpx” )
4 =report_run(A3;A1:”ds1″)
5 =report_exportXls@x(A3,”rpt.xlsx”)

3、运行这个dfx文件,得到导出的excel如下图:

可以看到,在润乾报表丰富的设计能力基础上,通过集算器将计算得到的数据传递给润乾报表,然后再导出为Excel,我们就能够将数据以更加丰富直观的方式提供给业务人员阅读使用,而处理过程也会因为自动化而变得更加快捷。

自动导出Excel的利器相关推荐

  1. 自动导出 Excel 的利器

    有时我们需要用程序来自动生成 Excel 文件,但 Excel 本身带的 VBA 并不好用,而集算器作为数据处理工具实现这个需求就会方便很多.本文将介绍如何用集算器生成 Excel 文件,而集算器本身 ...

  2. 【译】Asp.Net 导出 Excel 数据的9种方案

    简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website table 等多钟格式的文档.它具备自动识别行号,字符,格式化数字等功能,例如: ...

  3. vue + element中el-table导出excel

    第一步: 安装依赖: npm install --save xlsx file-saver 这里安装了两个依赖插件,感兴趣的读者可以去点开下面的链接,查看源码: https://github.com/ ...

  4. php导出excel失败原因,PHPExcel中导出Excel出错的一种可能原因

    PHPExcel是PHP中功能最强大的导入.导出.操作Microsoft Excel的开源项目. 虽然,目前有很多方法能够在PHP页面上导出csv文件,但是经过测试发现使用通常方式在PHP中导出的Ex ...

  5. php无法导出excel,PHPExcel导出Excel文件时出现错误的解决办法

    phpexcel文件是一款开源的php表格操作插件,只要用到excel数据导入导出的朋友大多数人都选择此款插件了,但在使用中也会有问题出现,下面来看问题分析研究. PHPExcel是PHP中功能最强大 ...

  6. asp导出EXCEL数字格式及自动适应宽度的问题

    asp导出EXCEL数字格式及自动适应宽度的问题 下面直接进行代码演示: <% If Response.IsClientConnected Then Response.Flush Else Re ...

  7. 懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法

       懒人小工具2:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法    github地址:https://github.com/Jimmey-Jiang/J ...

  8. java导出excel_java按需导出Excel并自动合同单元格

    java导出excel并单元格自动合并 最近公司有一个需求,就是按到模版导出数据报表,并内容相同的单元格实现自动合并.具体业务设计图如下所示 需求分析 由于头部是固定不变的,先使用excel创建数据模 ...

  9. excel自动导出功能_自动关联数据字典---SpringCloud Alibaba_若依微服务框架改造---工作笔记008

    若依框架自动生成的页面,有数据导出功能,可以导出excel, 但是对于带有数据字典的字段来说,比如男女,0是男,1是女 那么这个时候,导出的excel中就会显示出来.0,1而不会显示出来 汉字,男,女 ...

最新文章

  1. VS 2005 文本编码小技巧
  2. 教之初计算机考试函数应用题,教之初计算机考试系统
  3. python学习感悟第3节
  4. 使用Kubernetes和Docker将Spring Boot与MongoDB作为容器部署
  5. scanf()函数错误把输入缓存里的回车作为一次字符输入
  6. mysql为什么每天0点就装东西_MySQL 的 MRR 到底是什么?
  7. Django restframwork实现自定义数据格式的分页与搜索
  8. NYOJ-88-汉诺塔(一)
  9. 程序阻碍OD调试的方式2
  10. python画图代码大全-python 画图示例源码(Turtle Graphics)
  11. ALSA之Codec注册过程
  12. win10虚拟机连接不上内网服务器,win10系统虚拟机无法连接网络的解决方法
  13. 如何申请CSDN博客?
  14. php实现用百度ip地址查询接口查询ip归属地
  15. 2018 美团校招笔试题 K 的倍数
  16. ai如何置入_ai中更新置入图片链接的具体步骤介绍
  17. 关于Xray中代理的一些总结
  18. 解决oracle 报 ORA-20000(ORU-10027)错误的方法
  19. 如何查看IE浏览器的版本
  20. 敏涵控股集团董事长刘敏:品牌敏涵 用心做企业

热门文章

  1. 计算机三级relay agent,计算机三级网络技术大题技巧
  2. 【捡起C++】复合类型
  3. 6-2 计算长方体的表面积和体积 (10分) java
  4. 机器学习之SVM简介
  5. idea在plugins中为什么搜不到插件
  6. python做灰色关联度分析_python实现灰色关联
  7. 校园wifi网页认证登录入口
  8. 2018计算机统考知识点,2018考研之六大步骤解析计算机统考
  9. 精致女孩必备的5个手机APP,女神就是这样诞生的
  10. 卷积神经网络相关知识