python办公自动化,看完这一篇就够了!_python的自动化办公

做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。


(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

在这里插入图片描述

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

活动表

  • type 为活动类型
  • value 为活动积分
  • tilte 为该活动对于的职务

接下来就是活动记录表了,由于已经定义了活动与职务的对于关系,所以,活动记录表中,只需记录活动类型即可:[图片上传失败…(image-9db191-1649679796363)]

  • mixin_id 为用户id,std_id 其实是没必要的,不过录入打卡记录时顺带记录了
  • date 为活动发生的日期
  • type 为活动内容

如果同一个人同一天同一个活动出现多次,就会有重复记录,那么如何区分是否真的重复呢?在 数据收集 中展开。

除了基本的数据结构,还有积分统计明细和积分合计表,这里不再赘述,会在核算部分提及。

数据收集

现在数据框架有了,数据从何而来呢?

这个训练营的数据主要来自两个地方,第一是打卡数据,第二是日常记录数据。

打卡数据由鲸打卡提供,可以在浏览器中查看,并且提供了导出打卡 Excel 的功能。

不过操作比较麻烦:首先登录后台(用微信扫码登录),再先选择导出条件(一般为时间区间),下载Excel,然后打开 Excel,才能复制其中的打卡信息,存入文本文件,最后才能执行脚本处理。

好问题:
为什么不直接处理 Excel 呢?

  1. 因为Excel 处理需要安装额外库,也没有文本文件处理方便。
  2. 另外未来考虑做成 Web 系统,所以没有做 Excel 的进一步扩展。

不选择导出,就得用程序请鲸鱼打卡上抓取了。

所以就研究了下打开管理后台的请求,分析了一下,请求中有个 cookie 值是关键,于是,复制请求,转化为 Python 代码,详细描述见 自动预约程序

收集到的数据是 JSON 格式的,将其转化为 List,插入数据库:

def record\_check(rows):    dbrows = []    for row in rows:        u = get_user(std_id=int(row[0]))        if u:            if row[2] != "×":                dbrows.append((u['mixin\_id'], u['std\_id'], row[1], "打卡", 1, row[2], None))        else:            print("没有找到用户:", row)    if len(dbrows) > 0:        db.insert("tprj\_activity", dbrows)    return dbrows

  • record_check 方法是用来记录打开记录的,参数 rows 是从打开后台抓取的数据
  • get_user 是可以根据打卡用户的 id,从用户表中找到用户记录,然后结合打卡记录,补全打卡记录
  • db 是 上面提到的 DBSqlite 的一个实例,调用其 insert 方法将数据插入数据库

日常记录,需要根据训练营中的实际情况做记录,比如成员开单,组长轮值等,记录在 Excel 中比较方便。每日统计一次,所以我直接将数据复制处理,也存放到文本文件中,用程序解析成记录行,插入库表,展示一下解析方法:

def merge\_activity(datafilename):    rows = []    with open(datafilename, 'r', encoding='utf-8') as check_f:        data = {}        for line in check_f:            linedata = line[:-1].split('\t')            date = linedata[0].replace("/","-")            userinfo = linedata[1].split("/")            team = userinfo[0]            name, mixin_id, std_id = userinfo[1].split('-')            atype = linedata[2]            rows.append((mixin_id, date, atype))    ...

可以看到,通过读入文本行,再拆分成对于字段,合成活动记录。

这样两个数据收集工作就做好了,这里还需要解决一个问题 —— 避免数据重复。

容易想到的方法是,为数据设置联合主键,然后对数据做增量式更新。

但是这样做需要做更多的工作,而且还要很好的测试。

从业务上分析可知:活动数据并不多,学员个数不过一百。

那么不妨每次重算!?

即每次执行时,先库表数据删除,然后重新插入一遍。

虽然效率了不高,也算是用框架换时间吧,换的不出机器时间,而是我的工作时间哈哈。

自动核算

数据统计收集完毕,就需要根据活动积分,计算每个人的积分明细合计。

既然我们选用了数据库,就直接用 Sql 语句搞定吧。

相对程序处理来说,Sql 更容易做统计类的事情。

统计普通成员积分明细的语句如下:

INSERT INTO tprj_user_score_detail SELECT a.mixin_id, sum(s.value), u.team, '成员', a.date FROM    tprj_activity a    LEFT JOIN tprj_user u ON a.mixin_id = u.mixin_id    LEFT JOIN tbas_score s ON a.type = s.type WHERE s.title = '成员' GROUP BY    a.mixin_id,    u.team,    u.title,    a.date 

  • 查询所有职务属于 成员 的活动积分,插入成员积分明细表
  • tprj_activity 为活动记录表,与 tprj_user 用户表链接,然后再链接上活动表 tbas_score,作用是对活动类做约束
  • where 条件中,限制活动类型必须为 成员 活动
  • sum(s.value) 为一个成员的当日积分合计,日期 体现在 group by 的条件中了

类似的需要写很多统计语句,比如组长的,小组的,以及各自的积分合计,不再逐个展示了。

由于 sql 语句较多,为了便于管理,将 sql 语句整理到 sql.py 文件中,在导入主程序代码,最后调用 DBSqlite 工具方法执行,例如:

import sql...db.de(sql.user_score_detail)...

是不优雅多了?

打卡率是通过统计活动记录计算的:

def cal\_check\_rate():    ## 计算打卡率    team_member = {}    for r in db.query(sql.team_member_count):        team_member[r['team']] = r['mcount']    dbrows = []    for r in db.query(sql.team_check_count):        dbrows.append((r['team'], r['date'], round((r['checkcount']/team_member[r['team']])\*100)))    if len(dbrows) > 0:        db.insert("tprj\_team\_check\_rate", dbrows)    return dbrows

  • team_member_count 语句语句获取各组的人数,因为可能有人没有注册打卡。只通过打卡记录获取组内人数,不严谨。
  • team_check_count 语句是按组和日期分类核算出的组打卡数
  • 打卡率公式为:(打卡个数/组内人数) * 100%
  • 将计算好的打卡率,按日期存入 dbrows,最后插入数据库

这里还需要注意的是重复数据问题,处理方法简单粗暴:

全部清除重算

其他数据处理也类似。

报表导出

数据处理做好了,要让发挥数据的作用,就需要制作成报表,才能让其他人利用。

本着一切从简的原则(主要是需要尽快提供结果),选择也 Excel 呈现统计结果。

要输出哪些内容呢?

打卡率、成员积分、组排名等,是需要的。

对于打卡率,需要按组分类,这样就有读出小组成员的作用,如何抽取数据呢?

写个 Sql 就好了, 获取打卡率的语句 check_rate_show 如下:

SELECT 
    date,
    max(case when team ='1组' then rate else 0 end) as '1组',
    max(case when team ='2组' then rate else 0 end) as '2组',
    max(case when team ='3组' then rate else 0 end) as '3组',
    max(case when team ='4组' then rate else 0 end) as '4组',
    max(case when team ='5组' then rate else 0 end) as '5组'
FROM tprj_team_check_rate
GROUP BY date

  • tprj_team_check_rate 是用于按组和日期存放打卡率
  • select 语句中,使用了行转列的技巧,使得结果为 第一列为日期,后面列为各个组,这样是为了绘制成图表方便

其实结果可以导入 Excel ,生成报表,更方便一些,但是我没这样做,因为:

  1. 操作 Excel 比较费劲,调试工作量大
  2. 我有更大的打算,即最终实现为在线版的,所以花费大量时间不值得

因此我直接将数据输出到文本文件里了。

例如对打卡率的输出是这样的:

def show\_check\_rate():
    data = db.qj(sql.check_rate_show)
    result = []
    # 处理表头
    line = '\t'.join(data[0].keys()) + "\n"
    result.append(line)

    # 生成表头
    for d in data:
        row = []
        for k in d.keys():
            if k != 'date':
                row.append(str(d[k]) + "%")
            else:
                row.append(d[k])
        line = '\t'.join(row) + "\n"
        result.append(line)
    result.append('\n')
    return result

  • check_rate_show 执行 Sql 获得数据
  • 从数据中获取表头信息,做成一行记录,请注意字段的分隔为 tab 符,这样是为了方便直接粘贴到 Excel 中
  • 取出数据中的每一行,做成表体数据行
  • 最后再加入一个回车,这是为了和其他的输出分隔开

方法执行的结果,写入文本文件:

filename = "result\_%s.txt" % today.strftime("%Y-%m-%d %H\_%M\_%S")
with open(filename, 'w', encoding='utf-8') as r:
    r.writelines(show_check_rate()) # 打卡率
    r.writelines(show_member_score()) # 成员积分
    ...

  • filename 为要写入的文本文件,这里利用当前时间作为文件名,是为了不重复
  • 打开文件,用 writelines 方法将返回的行写入文件中
  • 这里还可以调用其他产生输出方法,将结果写入文件

最后,文件中数据如下:

date    1组  2组  3组  4组  5组
2021-08-01  65% 90% 79% 85% 72%
2021-08-02  75% 90% 79% 85% 67%
2021-08-03  55% 90% 84% 75% 67%
2021-08-04  60% 95% 74% 75% 61%

复制到 Excel 的图表数据中就会形成打卡率图表:

img

打卡率图表

日常维护

运营工作不是一成不变的,比如为了激励成员对提出的问题进行整理,新增了一个积分点叫 解答整理

就得调整积分项,因为之前已经将积分项用库表存储了,现在只需要增加一条记录,并指明该积分适用于成员角色就可以了。

另外,在 活动详情 报表中,需要按活动名称记录每个人的数据,也是个行转列的操作,但麻烦的是活动项是会变的。

于是先将获取项动态获取到,然后合成为行转列的语句,再和查询语句合并为完整的 Sql 语句,这样活动再有调整时,只管添加数据项就好了,代码如下:

score_type_temp = "max(case when type ='{atype}' then num else 0 end) as '{atype}'"types = db.query("select type, value from tbas\_score where title='%s'" % title)temps = []for t in types:    temps.append(sql.score_type_temp.format(atype=t['type']))allsql = sql.member_score.format(",\n".join(temps))

最后,将各部分的代码集成起来,放在一个 main 函数中,每天执行一次,将输出的文本文件中的数据复制到 Excel 中,就完成当日报表了,整个操作耗时不到十分钟,还算满意。

总结

促使我这么做的是,不想在机械的事情上耗费时间,所以会尽可能的将能自动处理的,让程序处理。

虽然让一切程序化是一个理想,在实现的道路上会有很多阻碍,所以还需要找到落地的平衡点,需要接受不完美,需要已实用为导向 —— 先实现,再完美

读者福利:知道你对Python感兴趣,便准备了这套python学习资料

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等习教程。带你从零基础系统性的学好Python!

零基础Python学习资源介绍

  • ① Python所有方向的学习路线图,清楚各个方向要学什么东西
  • ② 600多节Python课程视频,涵盖必备基础、爬虫和数据分析
  • ③ 100多个Python实战案例,含50个超大型项目详解,学习不再是只会理论
  • ④ 20款主流手游迫解 爬虫手游逆行迫解教程包
  • ⑤ 爬虫与反爬虫攻防教程包,含15个大型网站迫解
  • ⑥ 爬虫APP逆向实战教程包,含45项绝密技术详解
  • ⑦ 超300本Python电子好书,从入门到高阶应有尽有
  • ⑧ 华为出品独家Python漫画教程,手机也能学习
  • ⑨ 历年互联网企业Python面试真题,复习时非常方便

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
在这里插入图片描述

👉Python必备开发工具👈

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种功能强大的编程语言,可以被用于办公自动化,其中包括Excel表格的自动化处理。下面我们将详细介绍如何使用Python实现Excel表格的自动化处理。 Python的第三方库openpyxl可以用于处理Excel文件。首先,我们需要安装openpyxl库,可以通过pip命令进行安装。安装成后,我们可以使用openpyxl库中的函数和方法进行Excel表格的读取、写入和修改。 读取Excel文件非常简单,我们可以使用openpyxl库的load_workbook函数,指定要读取的文件路径,然后使用get_sheet_by_name函数选择要操作的工作表。这样,我们就可以使用cell函数来获取特定单元格的值。 写入和修改Excel文件也很容易。我们可以使用openpyxl库的Workbook函数创建一个新的Excel文件,然后使用create_sheet函数添加工作表。对于已经存在的Excel文件,我们可以使用Workbook的load_workbook函数打开文件,然后可以对工作表进行操作,例如使用cell函数来写入数据或修改单元格的值。 除了基本的读取、写入和修改操作,Python还可以进行更复杂的Excel表格自动化处理。我们可以根据条件筛选数据、合并或拆分单元格、插入和删除行列、设置单元格的格式等。 在实际的办公自动化应用中,Python的openpyxl库配合其他功能强大的库如pandas、numpy等,可以实现更多高级操作。同时,我们还可以使用Python库比如xlwings从Excel中调用Python代码,进一步提高Excel表格的自动化处理能力。 总而言之,Python可以通过openpyxl库实现Excel表格的自动化处理。通过读取、写入和修改单元格,我们可以实现数据的快速处理和分析。此外,Python还能进行更复杂的Excel操作,为办公自动化带来更多便利。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值