对很多工薪族来说,发工资这一天基本上是脱贫致富的重要日子,也是很多人的还款日子,交房租,还信用卡……想到接下来的日子又得靠拆东墙补西墙过。
即使发薪日就是还款日,但这个美好的日子还是值得每个职场人期待的!

近日,公司的财务小姐姐请我吃饭,当时我就有预感,绝对不是就吃一顿饭那么简单。
果然,在吃饭的时候,她羞涩的把脑袋凑过来悄悄跟我说,听说你Python很厉害呀。因为平时埋头写代码,很少跟女生讲话。今天小姐姐居然一开口就问我最擅长的技能,那我肯定要好好表现一番啊,
于是拍着胸脯说:“是的,我用Python上能控制火箭,下能操作坦克,你想做什么?”。
她立马一副崇拜的样子看着我说:“我每个月都要用Excel做工资表,但是每个月都要做一遍,你能不能用Python帮我写一个程序,能够自动完成这个工作。”。
我当然立马答应了啊,这么点小事,分分钟搞定!

需求:
在讲实现过程之前,先来给大家说说,这位财务小姐姐的需求是什么。首先他是有一个员工工资表,这个工资表是长这样的:

大家给自己工资条签过字的小伙伴都知道,我们需要的工资条上面都有一行标题,所以她的需求是要把工资条这样的:

之前她处理的方式就是一个个拷贝添加,效率实在太低。今天我给这位小姐姐做个程序,以后做工资条,一秒钟搞定!!!

实现逻辑分析:
Python中操作Excel的包有很多,比如有pandas、openpyxl、xlrd/xlwt等。在这里我们选择的是openpyxl,主要是他除了能处理数据外还能处理样式,功能比较完整。
首先加载excel文件,并且创建一个新的sheet来保存新生成的工资条样式。
代码如下:
wb = openpyxl.load_workbook('工资条.xlsx')
wb.copy_worksheet(wb['工资表'])
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
# 获取标题
header = [cell.value for cell in cells_rows[0]]
# 获取标题行中,每个单元格中的各种样式
alignment, border, fill, font = cell_style(cell=cells_rows[0][0])
上面代码是先定义了一个拷贝样式的函数,然后下面把样式拷贝出来。
最后一部分,就是把原始的工资数据读取出来,然后按照工资条的样式重新插入数据。逻辑有点多,建议理解一下:
# 获取每一列的值,拼接在一个列表中
cells_rows = [[cell for cell in row] for row in ws.rows]
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)
这里需要特别说明一点的就是更新公式。就拿第一次循环来说,我们在第3行的位置,插入了2个空白行。那么原本第3行的数据,此时就被挤到了第5行。
但是需要注意的是,它是被迫挤到第5行的,所以这一整行是原封不动搬到第5行的,包括它原来的公式。原来在第3行的时候,如果公式是SUM(E3:G3),被挤到到了第5行后,应该是SUM(E5:G5),但是它仍然是SUM(E3:G3),所以需要我们修改,上述代码中正是使用正则将这个数字3改为了5。
这样,我们就能把积累在一起的工资数据分割成一个个的工资条了。以后只要把需要处理的工资条,放到代码中,然后运行一下,瞬间就能生成想要的工资条样式了。
财务小姐姐再也不用加班啦,不加班去干嘛呢?啥都能干呀,哈哈哈哈~~
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

你还可以用Python试试其他有趣的玩法,比如实现机器学习算法、文本清洗、数据匹配、自动化报告等等。
Excel+Python,简直法力无边。

本文讲述了如何使用Python的openpyxl库自动化处理Excel工资表,通过编写程序实现工资条的批量生成,从而提高工作效率,避免财务人员的重复劳动。程序涉及到复制工作表、样式拷贝、数据读取与插入以及公式修正等关键步骤,让财务工作更加便捷。
946

被折叠的 条评论
为什么被折叠?



