自动化|Excel、Python靠边站,这才是实现报表自动化最快的方法( 二 )


缺点:①入门难:VBA代码太不友好了 , 很容易就从入门到放弃 ②数据处理量有限:一旦数据量到十几万行的话 , Excel就撑不住了 , 可能你花了三天三夜做好的报表 , 就直接卡到打不开了 。
二、掌握Python , 就写代码来实现报表自动化优点:能够实现很多自动化设计 , 从读取数据到输出数据都可以完成
缺点:①需要操作者学会写代码 , 学习成本比较高 。 ②数据处理量有限:如果说企业数据量涉及千万上亿条数据 , 一年可能要做上千张报表 , python加载数据就会极其卡顿 , 影响工作 。 ③一些复杂的报表 , 尤其是非数据类的报表用Python开发也不适合 , 比如下方打印货单的凭证、发票套打 。

说了这么多 , 还是举个例子来实践一下吧
一次自动化的报表制作 , 通常需要经历这样几个步骤:

  • 连接并操作数据库
  • 数据处理+自动化报表
  • 设置定时邮件发送给相关人员
1、连接并操作数据库
Python可以连接并操作各种数据库 , 包括Oracle、PostgreSQL、MySQL、SQL Server 等等 。 不同的数据库 , 需要安装不同的第三方模块 , 比如说 , 要操作Oracle , 那么通常需要先安装 cx_Oracle:
pip install cx_Oracle

在开始操作数据库之前 , 需要先创建一个数据库引擎 , 然后再连接数据库:
from sqlalchemy import create_engine# 创建数据库引擎engine = create_engine('oracle://user:password@ip_address:1521/orcl')# 连接数据库con = engine.connect()

如果你有数据库账号拥有创建表的权限 , 那么就可以对数据库进行增删改查的操作 。
# 增con.execute(\"insert into usr(id name) values(1 'Jim')\")
con.execute(\"insert into usr(id name) values(2 'Joe')\")# 删con.execute('delete from usr where id = 1')# 改con.execute(\"update usr set name = 'Jack' where id = 2\")# 查sql = 'select id name from usr where id = :id'import pandas as pd
df = pd.read_sql(sa.text(sql) engine params={'id': 2)
df

另外 , 利用Python去执行各种SQL 语句 , 自动完成更加复杂的数据库操作 。
2、数据处理+自动化报表
在Python执行SQL后 , 取出原始数据

想要实现的报表如下 , 这张日报表是用来监控每一天的销售、发货和用户反馈情况

代码如下(非完整版):

3、设置定时邮件发送给相关人员
以上就是一个典型的日报表 , 源数据不变 , 报表格式不变 , 就可以通过这段脚本自动生成 , 生成的报表也可以实现推送 , 利用Python实现自动化发送邮件 。
三、学会简单SQL , 用报表工具一步实现报表自动化刚刚举了Excel和Python的例子 , 但其实这两个方法各有各的优缺点 , 那有没有一种工具能融合两个方法的优点 , 又同时能避开它们的缺点?其实市面上已经有很多成熟的报表工具 , 可以解决这个问题 , 我拿知名度较高的报表工具FineReport举例吧 。 (文末可免费获得激活码)
相比较Python , 在都能一步取数、输出数据的前提下 , FR不需要写几百行的复杂代码 , 只需要学会简单的SQL语言 , 就能取数设计报表 , 绝大多数没有代码基础的人也能上手 , 且因为用的是类Excel的操作界面 , 使用习惯也不会有太大的改变 。 再相较Excel , FR能够直接从数据库取数 , 数秒处理几万行的数据 , 不用再苦苦等着加载报表 。

说了这么多 , 还是和上面一样 , 举个例子 , 看FR是如何让报表自动化 , 让打工人摆脱报表折磨的 。 其实很简单 , 只需解决三个难题: