浅谈智能输出数据表到excel

本文总结3种通过编程处理excel数据的方法。

工作中经常用到excel,很多时候是一条数据在不同的excel中导来导去。甚至是多条同格式的数据。如此频繁的操作,总让我想做点什么让它变simple。思考了很久,实践了很多方法。现做个总结。结合了不同的使用场景。

01

基于python简单转换

python语言最近很火,并且python可以实现很多功能,这里我并不是使用python来操作excel文件,而是根据要导出的excel内容,使用python在源数据中提取,并作为文本字符串来格式化成可复制粘贴的格式:

具体代码仅20行,包括import语句,打开html文件操作,读取html并用BeautifulSoup模块提取关键dom元素里的信息,然后合并字符串,使用\t分割单元格,使用\r\n换行。最后使用pyperclip模块复制到剪切板,这是我们打开excel直接粘贴即可。

优点:对python无需了解过多,开发耗时很少,实用性很强。

缺点:功能单一,需手动新建excel文件粘贴。

02

使用php读模板并填充数据

有些数据需要按照模板来填写,excel模板和源数据均为有n个字段(列),但是源数据的格式与模板的要求并不匹配,甚至模板对比源数据会多几个字段,少几个字段。而这往往也是日常操作,如此频繁的重复性工作,是否也有自动化的解决方法呢?

看本段标题就知道了,可以使用php来操作excel文件。读取,写入,导出一气合成。我使用的是PhpSpreadsheet,其官网有详细的使用方法。我们只需按照官网的示例代码,补充一下自己填充数据的操作即可。可实现xls、xlsx格式的任意转化。可以在现有的php项目中使用,也可以做成命令行,只需给定数据,运行一下即可导出我们符合模板格式要求的数据。还可批量导出,根据具体需求做开发即可。

实际使用中我实现了从数据库读数据,从文件读excel模板,然后将数据按照格式要求填充到模板即可在浏览器直接以下载的方式导出。

优点:直接输出excel文件,保留模板文件的格式与样式。

缺点:影响服务器性能,执行效率略低。受网络情况和php版本限制。

据说有个更好的php插件:Laravel Excel,github上的star比PhpSpreadsheet还多,但我知道它比较晚,没有用过。

03

浏览器中Javascript导出

直接在前端使用js导出excel,我使用的是SheetJs。微软将office系列的二进制格式文件开源已经10年了,很多编程语言均可以原生操作office系列的文件,这里我使用js来导出数据到excel并模拟文件下载。

SheetJs可以在浏览器直接读取、修改、导出数据到excel,根据需求只需使用导出模拟下载excel文件的功能即可。

为什么要使用js呢?和php的区别在哪?

由于php是在后端运行的,消耗的是服务器的性能(在自己电脑架设环境的暂不考虑),用php操作excel很消耗服务器的内存,如果数据量大一些,很可能一不小心就把服务器弄瘫痪了。并且如果数据量很大,再加上网络延迟等因素,php很可能在运行时超出了限制的响应时间从而自动终止运行,导致导出失败。用户体验很不好。因此在导出数据量很大的情景下可以使用js在前端浏览器直接生成excel。当在数据库获取了数据后,直接传到前台浏览器,使用js在前端将数据转化为excel直接导出,实际体验中,在数据量很大的情况下,使用js导出几乎是瞬间完成,和使用php需漫长等待的执行效率比毫无压力。

优点:客户端(浏览器)操作,服务器无压力。导出大量数据效率高。

缺点:无法设置格式和样式(我不会设置,也没研究。有会的可后台告诉我)。

本文写的比较仓促,如有任何建议和问题可在下方留言反馈。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180724G0RBX900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券