本文说明

今天和一个朋友吃饭,她说我经常使用Excel制作工资条,但是每个月都要做一遍,你能不能用python写一个代码,能够自动化完成这个工作。这当然可以啦,就是这么牛逼!

我们先来看看原始数据是什么样子的。

那么最后做成的效果是什么样子的呢?

这就很方便了,不管你公司有多少人,只要你把原始数据丢给我,我都可以秒出一个工资条,省得每次都需要使用Excel操作一遍,并且数据多了Excel还会卡顿。

代码逻辑剖析

那么这样一个程序,是怎么写的呢?

其实只要是逻辑想清楚了,剩下的就是写代码的事儿了。下面我就带着大家梳理一下,这段代码的逻辑。

首先,我们应该是读取Excel表格。然后需要拷贝其中一个sheet表到另外一张sheet表,并给sheet命名。这样做的目的:为了存放制作好工资条的那张sheet表。

import reimport openpyxlfrom copy import copywb = openpyxl.load_workbook('工资条.xlsx')# copy_worksheet():拷贝sheet表 wb.copy_worksheet(wb['工资条'])# worksheets:以列表的形式返回所有的Worksheet(表格)ws = wb.worksheets[-1]ws.title = 'final_工资条'

可能这样说的话,大家还是不知道上述代码每一行,到底是什么意思,我下面截一张图给大家,其实就可以很好的说明上述函数的含义了。

接着,就是给每一行数据前面添加一个表头。由于后面每一行表头的样式,都与第一行完全一模一样的,因此我们需要复制第一行表头中的样式。

def cell_style(cell):    alignment = copy(cell.alignment)    # 对齐样式    border = copy(cell.border)          # 边框样式    fill = copy(cell.fill)              # 填充样式    font = copy(cell.font)              # 字体样式    return alignment, border, fill, font    # 获取标题行中,每个单元格中的各种样式alignment, border, fill, font = cell_style(cell=cells_rows[0][0])

从上面的代码中可以看到:我定义了一个函数,我们直接使用copy库中的copy()方法,直接拷贝单元格的4大样式。因为原表第一行中每个单元格的4大样式,都是完全一致的,因此我们直接获取第一个单元格的样式即可。

最后这一part是整个代码中最精彩的部分,不太好叙述,大家仔细研究一下下方的注释。

for i, _ in enumerate(cells_rows[1:]):    if i > 0:        index = i*3        # 每循环一次,就在对应位置下方插入2行。1行是空行,1行是表头行。        ws.insert_rows(idx=index, amount=2)        # 因为每次插入2行,所以需要在表头行那里,将表头及其样式写入。        for j, v in enumerate(header):            r, c = index+1, j+1            cell = ws.cell(row=r, column=c)            cell.value = v            cell.alignment = alignment            cell.font = font            cell.border = border            cell.fill = fill            # 更新后面的公式            if cell.coordinate[:1] in ('H', 'J'):                cell = ws.cell(row=r+1, column=c)                cell.value = re.sub('d+', str(r+1), cell.value)

这里需要特别说明一点的就是更新公式。就拿第一次循环来说,我们在第3行的位置,插入了2个空白行。那么原本第3行的数据,此时就被挤到了第5行。

但是需要注意的是,它是被迫挤到第5行的,所以这一整行是原封不动搬到第5行的,包括它原来的公式。原来在第3行的时候,如果公式是SUM(E3:G3),被挤到到了第5行后,应该是SUM(E5:G5),但是它仍然是SUM(E3:G3),所以需要我们修改,上述代码中正是使用正则将这个数字3改为了5。

完整代码

import reimport openpyxlfrom copy import copydef cell_style(cell):    alignment = copy(cell.alignment)    # 对齐样式    border = copy(cell.border)          # 边框样式    fill = copy(cell.fill)              # 填充样式    font = copy(cell.font)              # 字体样式    return alignment, border, fill, fontwb = openpyxl.load_workbook('工资条.xlsx') wb.copy_worksheet(wb['工资条'])ws = wb.worksheets[-1]ws.title = 'final_工资条'# 获取每一列的值,拼接在一个列表中cells_rows = [[cell for cell in row] for row in ws.rows]# 获取标题header = [cell.value for cell in cells_rows[0]]# 获取标题行中,每个单元格中的各种样式alignment, border, fill, font = cell_style(cell=cells_rows[0][0])for i, _ in enumerate(cells_rows[1:]):    if i > 0:        index = i*3        # 每读取一行,就在下方插入两行        ws.insert_rows(idx=index, amount=2)        # 写表头        for j, v in enumerate(header):            r, c = index+1, j+1            cell = ws.cell(row=r, column=c)            cell.value = v            cell.alignment = alignment            cell.font = font            cell.border = border            cell.fill = fill            # 更新后面的公式            if cell.coordinate[:1] in ('H', 'J'):                cell = ws.cell(row=r+1, column=c)                cell.value = re.sub('d+', str(r+1), cell.value)# 整个代码写完后,一定要记得保存               wb.save('工资条.xlsx')    

各位做财务,行政,人事的小姐姐看过来呀,源代码免费分享哦,实在你不会我还可以给你打包exe文件,嘿嘿 源代码后台私信 源码

python自动卸载win程序_朋友说:能不能用python,帮我写一个“制作工资条”的自动化程序...相关推荐

  1. 打印工资条怎么做到每个人都有表头明细_朋友说:能不能用python,帮我写一个“制作工资条”的自动化程序?...

    本文说明 今天和一个朋友吃饭,她说我经常使用Excel制作工资条,但是每个月都要做一遍,你能不能用python写一个代码,能够自动化完成这个工作.这当然可以啦,就是这么牛逼! 我们先来看看原始数据是什 ...

  2. 我用python,帮朋友写了一个“制作工资条”的自动化程序!

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 白头宫女在,闲坐说玄宗. 本文说明 ...

  3. python自动卸载win程序_利用python实现自动扫雷程序

    自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 1.扫雷游戏 我是win10,没有默认的扫雷,所以去扫雷网下载 h ...

  4. 帮我写一个拦截APP广告的程序

    在写程序之前,首先你需要了解如何去分析和识别应用程序中的广告.一种方法是通过网络请求分析来识别广告.例如,你可以通过检测网络请求的 URL 来判断它是否是广告,或者你可以通过分析请求中所包含的数据来识 ...

  5. 用Python写一个模拟qq聊天小程序的代码实例

    前言 今天小编就为大家分享一篇关于用Python写一个模拟qq聊天小程序的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 Python 超简单的聊天 ...

  6. 如何用python写一个计算日期间隔的程序?

    如何用python写一个计算日期间隔的程序? 文章目录 如何用python写一个计算日期间隔的程序? 前言 问题梳理 问题解决 写在后面 前言 为什么想起来写一个这样的程序呢? 前几天聊天的时候,突然 ...

  7. python软件代码示例-用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  8. 能不能用python开发qq_用Python写一个模拟qq聊天小程序的代码实例

    用Python写一个模拟qq聊天小程序的代码实例 发布时间:2020-09-09 07:49:29

  9. 怎样用java写一个简单的文件复制程序

    怎样用java写一个简单的文件复制程序 代码来源:https://jingyan.baidu.com/article/c35dbcb0d6f1398916fcbc07.html package Num ...

最新文章

  1. windows域设计best practice
  2. 看懂三篇文章--需要归纳
  3. 数据中心服务器网络接入技术 — VEB、VEPA、VN-Tag
  4. Go语言封装Http协议GET和POST请求
  5. mysql page校验_MySQL InnoDB离线校验工具innochecksum使用
  6. 阿里云发布OAMKubernetes标准实现与核心依赖库
  7. Python监视电子邮箱并提示收到新邮件
  8. Shanda EZ Mini
  9. java 易错题_java错题集(1-3)
  10. 电镜的成像原理-冷冻电镜成像技术1
  11. 考勤系统——代码分析datagrid
  12. 【信息汇总】北京航空航天大学计算机考研
  13. ‘gbk‘ codec can‘t decode byte 0xae in position 199: illegal multibyte sequen 问题解决
  14. 远程桌面退出后CPU过高的问题
  15. 开学“收心”指南来了
  16. Techniques and Applications for Crawling, Ingesting and Analyzing Blockchain Data 中文翻译
  17. Python time库、random库概览+Python里面有趣的东西
  18. Python实验之制作一个公交车站查询系统。(附有源代码)
  19. PPT结尾页,除了「谢谢」你还能写点啥?
  20. microsoft.ACE.oledb.12.0异常解决(亲测有效)

热门文章

  1. OS- -文件系统(四)
  2. 【专题介绍】视频内容生产与消费创新(Part1)
  3. 对话王晶:音频人才亟待培养,高水平研究人员尤其欠缺
  4. 你对5G技术“低延时”可能有些误解——专访虎牙5G 首席架构师林正显
  5. Wave-Share -无服务器,点对点,通过声音共享本地文件
  6. LiveVideoStack线上分享第五季(五):用FFmpeg搭建基于CNN的视频分析方案
  7. 音视频技术开发周刊(第128期)
  8. LiveVideoStack线上交流分享 (九) —— B站的QUIC实践简介
  9. 用 Gearman 分发 PHP 应用程序的工作负载
  10. 利用configure脚本将定制的模块加入到Nginx中