天天看點

用Python自動生成資料日報!

作者:不秃頭程式員
用Python自動生成資料日報!

今天聊聊怎麼用Python自動生成資料日報!

其實我覺得蠻簡單,核心就是你組裝好日報的内容模闆,然後将變化的量交給python去填充,需要用到的基本就是python處理excel、word和ppt等相關的庫。熟練的使用它們,你就可以自動化一條龍了。

日報,是大部分打勞工繞不過的難題。

對于管理者來說,日報是事前管理的最好抓手,可以了解團隊的氛圍和狀态。可對于員工來說,那就有的聊了。對于重複性的工作,我非常推薦大家使用Python将其變成子產品化、自動化,幫助我們實作高效辦公。

下面我們通過一個補寫銷售日報的案例,展示一下Python自動化辦公的優勢。本文簡化了案例的流程,在文末附有完整代碼。

用Python自動生成資料日報!

需求詳解

朋友的需求是這樣的,他們平時的銷售資料是記錄在Excel上,彙總後會按照部門進行統計。但是今年年初時,上司突然要求寫日報,大家寫了一個月發現并不檢查就沒繼續寫下去。

用Python自動生成資料日報!

現在突然被要求明天交本月之前的所有日報,這相當于要補2-5月将近120天的日報,如果靠雙手複制粘貼,那估計要吐血了。朋友将其寫日報的相關檔案都發了過來,發現最終日報效果如下所示。

用Python自動生成資料日報!

是以需求也就是比較簡單了,隻需要從Excel表格中讀取每日的資料,使用Python将其處理後,再依次寫入Word文檔中,即可實作批量生成日報。

資料處理

在進行資料處理之前,要先了解最終需要哪些資料。如下圖所示,在目标日報Word中主要分為兩類:紅色标記的數值主要是由當日的資料、或者由它們計算後得到的資料構成;綠色标記的表格則更簡單了,就是近七日的資料(銷售數量、銷售金額、銷售目标、完成度)。

用Python自動生成資料日報!

首先我們導入Pandas子產品進行資料處理

import pandas as pd
df = pd.read_excel("日報資料.xlsx")
df           

輸出結果

用Python自動生成資料日報!

導入資料後,接着就可以按照我們的需求,來進行資料運算了。資料運算主要分為兩種,一種是利用加 +、減 -、乘 *、除 / 進行資料運算,另一種是利用統計方法進行資料運算。

在互動式環境中輸入如下指令:

df["日期"] = df["日期"].apply(lambda x:x.strftime("%Y-%m-%d"))
df["當日完成度"] = (df["銷售金額"]/df["銷售目标"]*100).round(1)
df["累計銷售金額"] = df["銷售金額"].cumsum()
df["當年完成度"] = (df["累計銷售金額"]/2200000*100).round(1)
df["累計銷售金額"] = (df["累計銷售金額"]/10000).round(2)
df           

輸出結果:

用Python自動生成資料日報!

可以看到,最終結果截圖中紅色标記的資料内容已經全部被計算出來。而綠色标記的表格則更加簡單了,使用Pandas子產品中的資料選取即可。

在互動式環境中輸入如下指令:

num = 10
df.iloc[num-7:num, :5]           

輸出結果:

用Python自動生成資料日報!

通過這種方法就可以輕松得到某一日期的過去7日内的日報資料合集。

自動生成日報

使用Python自動化操作Word通常會使用python-docx子產品,而批量生成Word文檔一般有兩種方法:使用add_ paragraph()、add_table()等方法給Word文檔添加各種内容。另一種就是我們這次要用的,即按照位置替換原Word文檔中的文字和表格資料等。

在互動式環境中輸入如下指令:

for index, rows in df.iterrows():
    if index > 30:
        doc.paragraphs[0].runs[1].text = rows[0]
        doc.paragraphs[4].runs[4].text = rows[0]
        doc.paragraphs[4].runs[6].text = str(rows[1])
        doc.paragraphs[4].runs[8].text = str(rows[2])
        doc.paragraphs[5].runs[1].text = str(rows[3])
        doc.paragraphs[5].runs[3].text = str(rows[4])
        doc.paragraphs[9].runs[2].text = str(rows[5])
        doc.paragraphs[9].runs[7].text = str(rows[6])

        table = doc.tables[0]
        data_table = df.iloc[index-6:index+1,:5]    
        for i in range(7):
            for j in range(5):
                table.cell(i+1,j).text = str(df.iloc[i,j])
        
        doc.save(f"銷售日報-{rows[0]}.docx")           

執行代碼,輸出結果:

用Python自動生成資料日報!

如上圖所示,120份有記錄的銷售日報就寫好啦,Python自動化辦公就是怎麼神奇。

因為文法簡單、容易上手,Python 被稱為“最适合初學者學習”的程式設計語言。而對于工作中各種重複性的電腦工作,都可以考慮用Python來轉變為自動化程式。

如果你是一個Python初學者,會發現本文的邏輯非常簡單,甚至大家還可以對此進行改進。比如python-docx子產品在讀取Word文檔有優勢,但是向模闆中寫入文本時,可以考慮使用docxtpl子產品(學一點Jinja2文法)。