数据日报自动化了!
需求详解
数据处理
import pandas as pd
df = pd.read_excel("日报数据.xlsx")
df
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
num = 10
df.iloc[num-7:num, :5]
自动生成日报
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-docx
模块在读取Word文档有优势,但是向模板中写入文本时,可以考虑使用docxtpl
模块(学一点Jinja2语法)。评论