自動化|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 語句 , 自動完成更加復雜的數據庫操作 。
【自動化|Excel、Python靠邊站,這才是實現報表自動化最快的方法】2、數據處理+自動化報表
在Python執行SQL后 , 取出原始數據

想要實現的報表如下 , 這張日報表是用來監控每一天的銷售、發貨和用戶反饋情況

代碼如下(非完整版):

3、設置定時郵件發送給相關人員
以上就是一個典型的日報表 , 源數據不變 , 報表格式不變 , 就可以通過這段腳本自動生成 , 生成的報表也可以實現推送 , 利用Python實現自動化發送郵件 。
三、學會簡單SQL , 用報表工具一步實現報表自動化剛剛舉了Excel和Python的例子 , 但其實這兩個方法各有各的優缺點 , 那有沒有一種工具能融合兩個方法的優點 , 又同時能避開它們的缺點?其實市面上已經有很多成熟的報表工具 , 可以解決這個問題 , 我拿知名度較高的報表工具FineReport舉例吧 。 (文末可免費獲得激活碼)
相比較Python , 在都能一步取數、輸出數據的前提下 , FR不需要寫幾百行的復雜代碼 , 只需要學會簡單的SQL語言 , 就能取數設計報表 , 絕大多數沒有代碼基礎的人也能上手 , 且因為用的是類Excel的操作界面 , 使用習慣也不會有太大的改變 。 再相較Excel , FR能夠直接從數據庫取數 , 數秒處理幾萬行的數據 , 不用再苦苦等著加載報表 。

說了這么多 , 還是和上面一樣 , 舉個例子 , 看FR是如何讓報表自動化 , 讓打工人擺脫報表折磨的 。 其實很簡單 , 只需解決三個難題:

相關經驗推薦