51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 760|回复: 0
打印 上一主题 下一主题

用Python自动生成数据日报!(含附件)

[复制链接]
  • TA的每日心情
    无聊
    12 小时前
  • 签到天数: 1052 天

    连续签到: 2 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-7-14 09:54:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    其实我觉得蛮简单,核心就是你组装好日报的内容模板,然后将变化的量交给python去填充,需要用到的基本就是python处理excel、word和ppt等相关的库。熟练的使用它们,你就可以自动化一条龙了。
      日报,是大部分打工人绕不过的难题。
      对于管理者来说,日报是事前管理的最好抓手,可以了解团队的氛围和状态。可对于员工来说,那就有的聊了。对于重复性的工作,我非常推荐大家使用Python将其变成模块化、自动化,帮助我们实现高效办公。
      下面我们通过一个补写销售日报的案例,展示一下Python自动化办公的优势。本文简化了案例的流程,在文末附有完整代码。

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

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

    所以需求也就是比较简单了,只需要从Excel表格中读取每日的数据,使用Python将其处理后,再依次写入Word文档中,即可实现批量生成日报。
      数据处理
      在进行数据处理之前,要先了解最终需要哪些数据。如下图所示,在目标日报Word中主要分为两类:红色标记的数值主要是由当日的数据、或者由它们计算后得到的数据构成;绿色标记的表格则更简单了,就是近七日的数据(销售数量、销售金额、销售目标、完成度)。

     首先我们导入Pandas模块进行数据处理。
    1. import pandas as pd
    2.   df = pd.read_excel("日报数据.xlsx")
    3.   df
    复制代码
    输出结果:

    导入数据后,接着就可以按照我们的需求,来进行数据运算了。数据运算主要分为两种,一种是利用加 +、减 -、乘 *、除 / 进行数据运算,另一种是利用统计方法进行数据运算。
      在交互式环境中输入如下命令:
    1. df["日期"] = df["日期"].apply(lambda x:x.strftime("%Y-%m-%d"))
    2.   df["当日完成度"] = (df["销售金额"]/df["销售目标"]*100).round(1)
    3.   df["累计销售金额"] = df["销售金额"].cumsum()
    4.   df["当年完成度"] = (df["累计销售金额"]/2200000*100).round(1)
    5.   df["累计销售金额"] = (df["累计销售金额"]/10000).round(2)
    6.   df
    复制代码
    输出结果:

    可以看到,最终结果截图中红色标记的数据内容已经全部被计算出来。而绿色标记的表格则更加简单了,使用Pandas模块中的数据选取即可。
      在交互式环境中输入如下命令:
    1. num = 10
    2.   df.iloc[num-7:num, :5]
    复制代码
    输出结果:

    通过这种方法就可以轻松得到某一日期的过去7日内的日报数据合集。
      自动生成日报
      使用Python自动化操作Word通常会使用python-docx模块,而批量生成Word文档一般有两种方法:使用add_ paragraph()、add_table()等方法给Word文档添加各种内容。另一种就是我们这次要用的,即按照位置替换原Word文档中的文字和表格数据等。
      在交互式环境中输入如下命令:
    1.  for index, rows in df.iterrows():
    2.      if index > 30:
    3.          doc.paragraphs[0].runs[1].text = rows[0]
    4.          doc.paragraphs[4].runs[4].text = rows[0]
    5.          doc.paragraphs[4].runs[6].text = str(rows[1])
    6.          doc.paragraphs[4].runs[8].text = str(rows[2])
    7.          doc.paragraphs[5].runs[1].text = str(rows[3])
    8.          doc.paragraphs[5].runs[3].text = str(rows[4])
    9.          doc.paragraphs[9].runs[2].text = str(rows[5])
    10.          doc.paragraphs[9].runs[7].text = str(rows[6])
    11.          table = doc.tables[0]
    12.          data_table = df.iloc[index-6:index+1,:5]   
    13.          for i in range(7):
    14.              for j in range(5):
    15.                  table.cell(i+1,j).text = str(df.iloc[i,j])
    16.          doc.save(f"销售日报-{rows[0]}.docx")
    复制代码
    执行代码,输出结果:

     如上图所示,120份有记录的销售日报就写好啦,Python自动化办公就是怎么神奇。
      完整代码获取方式:
      链接:https://pan.baidu.com/s/1gayOUOq_YCONvRmtNo0NIA
      提取码:p9iw






    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-27 22:23 , Processed in 0.071429 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表