竟可以这么轻松解决,用 Python 自动生成数据日报

人生苦短,我用 Python!日报,是大部分打工人绕不过的难题。

对于管理者来说,日报是事前管理的最好抓手,可以了解团队的氛围和状态。可对于员工来说,那就有的聊了。对于重复性的工作,我非常推荐大家使用Python将其变成模块化、自动化,帮助我们实现高效办公。喜欢记得收藏、关注、点赞。

完整代码、技术交流,文末获取

图片

下面我们通过一个补写销售日报的案例,展示一下Python自动化办公的优势。本文简化了案例的流程,在文末附有完整代码。

图片

需求详解

朋友的需求是这样的,他们平时的销售数据是记录在Excel上,汇总后会按照部门进行统计。但是今年年初时,领导突然要求写日报,大家写了一个月发现并不检查就没继续写下去。

图片

▲Excel日报数据

现在突然被要求明天交本月之前的所有日报,这相当于要补2-5月将近120天的日报,如果靠双手复制粘贴,那估计要吐血了。朋友将其写日报的相关文件都发了过来,发现最终日报效果如下所示。

图片

所以需求也就是比较简单了,只需要从Excel表格中读取每日的数据,使用Python将其处理后,再依次写入Word文档中,即可实现批量生成日报。

正好最近有本新书《快学Python:自动化办公轻松实战》,既是一本Python入门书,又包含了大量Python自动化办公的实战项目。我们只需学习其中的第3章、第5章,即可轻松实现今天的这个需求。

数据处理

在进行数据处理之前,要先了解最终需要哪些数据。如下图所示,在目标日报Word中主要分为两类:红色标记的数值主要是由当日的数据、或者由它们计算后得到的数据构成;绿色标记的表格则更简单了,就是近七日的数据(销售数量、销售金额、销售目标、完成度)。

图片

首先我们导入Pandas模块进行数据处理,在新书《快学Python:自动化办公轻松实战》的第3章中,正是【学习Python,可以自动化处理数据】。

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

输出结果:

图片

可以看到,最终结果截图中红色标记的数据内容已经全部被计算出来。而绿色标记的表格则更加简单了,使用Pandas模块中的数据选取即可,详见新书《快学Python:自动化办公轻松实战》章节3.2.3。

在交互式环境中输入如下命令:

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

输出结果:

图片

通过这种方法就可以轻松得到某一日期的过去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")

执行代码,输出结果:

图片

如上图所示,120份有记录的销售日报就写好啦,Python自动化办公就是怎么神奇。

图片

联系方式

目前开通了技术交流群,群友已超过3000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友,资料获取也可以加入

方式1、添加微信号:dkl88191,备注:来自CSDN
方式2、微信搜索公众号:Python学习与数据挖掘,后台回复:加群
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序员每天自动填写周报日报工时脚本完整脚本(附源码),使用查看发布的博客使用方法。 如果需要定制或者实现相关的脚本都可以私信作者。 现在公司都要求填每天写周报、日报、工时之类的信息,有时候弄着弄着就忘记了。导致工时异常,被领导点名啥的。索性写个自动填写的脚本+定时任务+工作日判断+自动启动服务,完整的自动填写。 通过对工作日志平台的分析,发现都是加密安全https请求,有些公司是内网,不排除有http的这种简单一点,本想通过 shell 脚本写一个比较通用一点的脚本,不过多依赖任何外部的资源,但是发现,如果用简单的 sh 脚本做 https 请求需要在请求的时候带入相关的证书 cacert 、key、cert 等信息,比较繁琐。因此,退而求其次,采用python脚本,现在Linux系统基本都自带安装了,也不算要安装什么额外的资源,最后把相关的脚本进行整理,只需要执行一行命令即可启动运行。需要修改脚本中的部分如下: ``` # =======================================等号包裹以内需要修改====================================================== # 用户名称 USERNAME = "Frank" # 用户密码 PASSWORD = "123456" # 运行方法 # python3 fill_work_log.py > fill_work_log.log & # 运行规则 # 如果不设置下面的开始日期和结束日期,脚本会一直到后台运行,每天晚上 22:00 之后自动填写工作日志,周六、周日自动跳过。 # 如果想补日志,只需要设置缺少的开始日期和结束日期,脚本会自动补齐指定日期范围内的工作日志,之后会转入后台运行,每天晚上 22:00 之后自动填写工作日志。 # 开始日期,如:2020-09-05 START_DATE='' # 结束日期,如:2020-09-25 END_DATE='' # =======================================等号包裹以内需要修改====================================================== ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值