前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用Python拒绝重复工作,每周的项目进度还是自动发送的好

利用Python拒绝重复工作,每周的项目进度还是自动发送的好

作者头像
Bug生活2048
发布2020-02-26 16:51:14
8320
发布2020-02-26 16:51:14
举报
文章被收录于专栏:Bug生活2048Bug生活2048

在家远程办公的第二周,各种汇报邮件满天飞

背景

由于远程办公的原因,很多口头汇报或者会议同步的事项都需要邮件或者书面的方式进行汇报了。

往往领导的要求是‘苛刻’的,要求每天要发送XXXX的报表,每周又要发送XXXX的周报,作为一位有理想的码农,我的内心是拒绝的。

所以每天的工作周报,每周的项目进度等等标准化的汇报事项,我都通过自动化脚本的方式进行处理。

想法

通常衡量一件事是否可以用脚本实现,主要看能否标准化和重复使用次数。也就是说,经常要重复要做的标准化的事项可以用自动化的脚本去代替,往往这样的操作可以提高自身的工作效率,这样你就可以有更多的时间去学习「浪」了。

像我目前遇到的,每天需要在群里汇报下今天的工作内容及进度,每周要发下项目的整体进度等等,完全可以使用自动化的脚本去处理。

一旦处理的好,对外的直观感受就是你比较专业和严谨,每天固定的时间汇报,时间一致,格式一致,从没有忘记过。是不是一举多得。

思路

既然有了想法,就要去实现,首先推荐Python,简单且搞笑,有点开发基础的基本很快上手,很快实现。

然后确定数据源,拿我的例子举例,目前我们公司用的腾讯的tapd,很多工作相关的需求,项目进度,BUG情况都能在tapd体现。

但领导往往很少看这些散列的数据,往往需要你定时整理一份指定格式的汇总报表,以邮件的方式发送给他,相信这样的需求大家经常碰到。

既然需求出现了,那就让代码解决吧。

这里以我每周要发送一份项目进度为例,目标Excel如下格式:

截图1

数据源是在tapd中,目标产物也有了,剩下的无非就是获取数据源的数据,然后转换成对应的目标产物,最后通过邮件的方式发送给目标用户。

python实现

主要用了下面三个核心库,分别用来获取数据,生成Excel,发送邮件。

代码语言:javascript
复制
#用于调用API获取数据源
import requests
#用于生成Excel
import xlsxwriter
#用于调用exchange发送邮件
from exchangelib import Credentials, Account

几个核心库的基础用法这里就不多说了,官方文档和网上的教程也一大堆。

基本上这类需求都是三个步骤,首先通过requests来获取你的目前数据,不管是有官方API,还是通过爬虫爬取的方式,当然后API是最好的,比较简单,像tapd就提供了相应的API,简单调用就能获取到数据。

代码语言:javascript
复制
'''
    调用API获取tapd需求内容
'''
def getTapdStories(ids):
    url='{0}?limit=200&workspace_id={1}&id={2}'.format(TAPD_API,WORKSPACE_ID,ids)
    request=requests.get(url,headers = HEADERS)
    response = request.json()['data']
    return response

接着就是将目标数据转换成你需要的数据,这里tapd的任务会无限嵌套,所以搞了个递归获取到最小粒度的任务信息:

代码语言:javascript
复制
'''
    递归获取最小粒度的任务信息
'''
def getTaskData(id,programName,moduleName,moduleId):
    taskData=[]
    response=getTapdStories(id)
    if isinstance(response,list)==False:
        story=response['Story']
        strChildrenId=story['children_id']
        if  strChildrenId =='|':
            taskData.append(buildData(story,programName,moduleName,moduleId))
        else:
            strChildrenId=strChildrenId[2:].replace('|',',')
            taskData.extend(getTaskData(strChildrenId,programName,moduleName,moduleId))
    else:
        for story in response:
            story=story['Story']
            strChildrenId=story['children_id']
            if  strChildrenId =='|':
                taskData.append(buildData(story,programName,moduleName,moduleId))
            else:
                strChildrenId=strChildrenId[2:].replace('|',',')
                taskData.extend(getTaskData(strChildrenId,programName,moduleName,moduleId))
    return taskData

然后利用xlsxwriter将目标数据生成Excel:

代码语言:javascript
复制
workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet('sheet1')
#写入表头
worksheet.write_row('A1',EXCEL_TABLE_HEADER_NAME,titleStyle)
#设置列宽
for index in range(len(EXCEL_TABLE_HEADER_WIDTH)):
        worksheet.set_column(index,index,EXCEL_TABLE_HEADER_WIDTH[index])
#填充数据
for index in range(len(excelData)):
        worksheet.write_row(index+1,0,excelData[index],defaultStyle)

#合并单元格      
for index in range(len(merageData)):
        worksheet.merge_range(i, 1, merageData[index]['merageCount']+i-1,1,merageData[index]['moduleId'][-7:], cell_format=defaultStyle)
        i+=merageData[index]['merageCount']
workbook.close()

最后通过exchangelib发送邮件:

代码语言:javascript
复制
def sendMail(htmlBody, day, account):
    m = Message(
        account=account,
        subject=SUBJECT.format(day),
        body=HTMLBody(htmlBody),
        to_recipients=TO
    )
    m.send_and_save()

总结

由于涉及到公司内部的一些敏感信息,所以不能贴完整的代码,但整体思路基本如上面所说,熟练使用上面的几个组件,相信大部分类似的需求都能轻松搞定。

最后还是想说,还是要学会偷懒,重复的事情千万不能将就,也许发个周报每天只要几分钟,但一天天积累下来,所花的时间还是不少的,不如花点时间,搞点创新,把时间花在更有的意义的事情上。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Bug生活2048 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
TAPD 敏捷项目管理
TAPD(Tencent Agile Product Development)是源自于腾讯的敏捷研发协作平台,提供贯穿敏捷研发生命周期的一站式服务。覆盖从产品概念形成、产品规划、需求分析、项目规划和跟踪、质量测试到构建发布、用户反馈跟踪的产品研发全生命周期,提供了灵活的可定制化应用和强大的集成能力,帮助研发团队有效地管理需求、资源、进度和质量,规范和改进产品研发过程,提高研发效率和产品质量。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档