Python自动化结算工资和统计报表

实例需求说明

你好,我是悦创。

博客首发:https://bornforthis.cn/column/pyauto/auto_base07.html

学习了 Excel 文件的写入、读取和追加内容,那现在来做个案例。

需求描述并整理,如下:

  • 每个月的 2 号,你会收到一个 Excel 文件;
  • 文件中包含了 各个部门的员工信息;
  • 你需要一天之内完成这些报表的整理和统计,然后交给领导检查和发放工资;
  • 时间要快,工资发晚了,同事会抱怨你;
  • 工作量还是比较大的,你需要解放双手,让程序去处理问题
  • 让程序快速的计算出每个人的工资,并将统计信息结合模板,生成“xxxx年xx月各部门员工数据总览”;
  • 薪资计算规定:迟到一次扣 20,一个月最多扣 200;

简单的财务自动化结算需求,并且给出了各部门的工资表格文件和统计报表的模板文件。

需求说明图示

简单的财务自动化结算需求,并且给出了各部门的工资表格文件和统计报表的模板文件,截图如下:

批量生成财务报表.ipynb”这个文件里面有可执行代码,执行后会自动的生成 5 个部门的财务文件。你也可以自己使用下面代码自动生成:

# -*- coding: utf-8 -*-
# @Time    : 2022/7/15 21:48
# @Author  : AI悦创
# @FileName: demo2.py
# @Software: PyCharm
# @Blog    :http://www.aiyc.top
# @公众号   :AI悦创
import xlwt
import faker
import random
import datetimedef create_excel_file(filename, department):wb = xlwt.Workbook(filename)sheet = wb.add_sheet('sheet1')fake = faker.Faker("zh_CN")head_data = ['部门', '姓名', '工号', '薪资(元)', '迟到次数(次)', '奖金(元)', '实发工资']for head in head_data:sheet.write(0, head_data.index(head), head)for i in range(1, random.randint(5, 100)):sheet.write(i, 0, department)sheet.write(i, 1, fake.last_name() + fake.first_name())sheet.write(i, 2, "G{}".format(random.randint(1, 1000)))sheet.write(i, 3, random.randint(4000, 16000))sheet.write(i, 4, random.choice([0, 0, 0, 1, 2, 3, 4]))sheet.write(i, 5, random.choice([200, 300, 400, 500, 600, 700, 800, 900]))wb.save(filename)department_name = ['技术部', '推广部', '客服部', '行政部', '财务部']
for dep in department_name:xls_name = "{}-{}.xls".format(datetime.datetime.now().strftime("%Y-%m"), dep)create_excel_file(xls_name, dep)print(xls_name, " 新建完成")

下面是财务文件和模板文件的截图:

财务文件中,每个用户数据,都是缺少应发工资的,需要用程序计算和填写;

模板文件的使用,需要将本月的部门财务文件全部计算并统计出来,然后填充到模板文件中,生成一个本月的数据总览表格,如下截图:

选中的部分是需要使用程序自动填写。

一共有5个财务文件,每个文件有不固定个数的员工信息。

那接下来就开始写代码,实现自动化工资结算和统计报表的任务。

库的导入和准备代码

首先第一步,导入需要的库,生成时间对象。还有就是文件夹中,放着很多文件,有 xlsipynb 等格式,所以还需指定要操作的文件名,如下代码:

import datetime
import xlrd, xlwt
from xlutils.copy import copydepartment = ['技术部', '推广部', '客服部', '行政部', '财务部']
template_name = "月结统计模板.xls"
today_datetime = datetime.datetime.now()
need_process_xls = []
for dep in department:xls_name = "{}-{}.xls".format(datetime.datetime.now().strftime("%Y-%m"), dep)need_process_xls.append(xls_name)
print(need_process_xls)
# 输出:['2022-12-技术部.xls', '2022-12-推广部.xls', '2022-12-客服部.xls', '2022-12-行政部.xls', '2022-12-财务部.xls']

这里指定了模板文件名,时间对象,然后批量的生成了所需处理的部门财务文件。

Python 自动化结算工资

每个财务文件都是完全一致的,就是数据的不同,所以接下来,做一个函数,所做的操作就是接收文件名,并计算出文件中全部人员的工资,并写入文件然后保存。代码如下:

def process_xls_return_data(xls_name):wb = xlrd.open_workbook(xls_name)wb_sheet = wb.sheet_by_index(0)xwb = copy(wb)xwb_sheet = xwb.get_sheet('sheet1')rows = wb_sheet.nrowsfor row in range(1, rows):bm = wb_sheet.cell(row, 0).valuexm = wb_sheet.cell(row, 1).valuegh = wb_sheet.cell(row, 2).valuegz = wb_sheet.cell(row, 3).valuecdcs = wb_sheet.cell(row, 4).valuejj = wb_sheet.cell(row, 5).valuesfgz = gz - (cdcs * 20) + jj  # 实发工资 = 工资  -  (迟到次数*20)  +  奖金print(bm, xm, gh, gz, cdcs, jj, sfgz)xwb_sheet.write(row, 6, sfgz)xwb.save(xls_name)for cls in need_process_xls:process_xls_return_data(cls)

对函数代码进行介绍:

  • 打开文件,打开 sheet,复制文件,读取文件中数据的总行数;
  • 从第二行【索引1】开始,读取 部门、姓名、工号、工资、迟到次数、奖金;
  • 然后计算应发工资,公式:应该工资 = 工资 - (迟到次数*20) + 奖金;
  • 将应该工资写入到当前行的第7个位置【索引6】上;
  • 最后保存,保存的文件名依旧是源文件名;
  • 完成单个文件的操作;

最下面的 for 循环,就是循环读取要操作的全部财务文件,逐个进入函数中操作,计算工资和保存。

Python 自动化结算工资+报表统计

自动化的工资结算已经处理好了,下面就是统计各个部门的财务报表。

报表中,需要写入 部门、总人数、迟到人数、拿奖金人数、应发总工资这五项,还有头部的“xxxx-xx-各部门员工数据总览

部门的数据,都是从单个的部门财务文件中获取,例如迟到人数和拿奖金人数,都是判断是否迟到和是否有奖金,都用一个参数进行记录。

这个需求,可以在原来的函数之上,做个统计操作,并在函数结尾时,将这五个数据,做成列表并返回回去。

最后一个就是统计报表的头部字段,里面含有年份和月份,这个可以直接使用时间对象生成即可,但是字体的大小和居中效果是需要额外定义样式 style 的,所以这部分代码比较突兀,大家看懂即可。

如下代码:

def process_xls_return_data(xls_name):staff_number = 0  # 总人数字段cd_number = 0  # 迟到人数字段jj_number = 0  # 拿奖金人数字段total_pay = 0  # 总应发工资字段wb = xlrd.open_workbook(xls_name, formatting_info=True)wb_sheet = wb.sheet_by_index(0)xwb = copy(wb)xwb_sheet = xwb.get_sheet('sheet1')rows = wb_sheet.nrowsfor row in range(1, rows):staff_number = staff_number + 1  # 每个数据都是一个员工,直接+1bm = wb_sheet.cell(row, 0).value  # 部门名称xm = wb_sheet.cell(row, 1).valuegh = wb_sheet.cell(row, 2).valuegz = wb_sheet.cell(row, 3).valuecdcs = wb_sheet.cell(row, 4).valueif cdcs > 0:  # 如果迟到次数大于0,则是迟到过的人,迟到人数+1cd_number = cd_number + 1jj = wb_sheet.cell(row, 5).valueif jj > 0:  # 如果奖金大于0,则是获得了奖金的人,拿奖金人数+1jj_number = jj_number + 1sfgz = gz - (cdcs * 20) + jj  # 实发工资 = 工资  -  (迟到次数*20)  +  奖金total_pay = total_pay + sfgz  # 将所有的实发工资加到一起,就是总的实发工资print(bm, xm, gh, gz, cdcs, jj, sfgz)xwb_sheet.write(row, 6, sfgz)xwb.save(xls_name)print([bm, staff_number, cd_number, jj_number, total_pay])return [bm, staff_number, cd_number, jj_number, total_pay]  # 最后将部门 总人数  总迟到人数  总拿奖金人数  总实发工资做成列表,一并返回all_info = []
for cls in need_process_xls:one_partment = process_xls_return_data(cls)all_info.append(one_partment)  # 将函数的返回值,放到列表中,就得到了所有部门的统计信息wb = xlrd.open_workbook(template_name, formatting_info=True)
wb_sheet = wb.sheet_by_index(0)
xwb = copy(wb)
xwb_sheet = xwb.get_sheet('Sheet1')
current_row = wb_sheet.nrows
year_month = datetime.datetime.now().strftime("%Y-%m")
title = "{}-各部门员工数据总览"def create_style():  # 定义字体格式,返回一个字体大小24,垂直居中 水平居中 宋体格式 的样式style = xlwt.XFStyle()fnt = xlwt.Font()  # 创建一个文本格式,包括字体、字号和颜色样式特性fnt.name = u'宋体'fnt.height = 20 * 24alignment = xlwt.Alignment()alignment.horz = 0x02  # 0x01(左端对齐)、0x02(水平方向上居中对齐)、0x03(右端对齐)alignment.vert = 0x01  # 0x00(上端对齐)、 0x01(垂直方向上居中对齐)、0x02(底端对齐)style.font = fntstyle.alignment = alignmentreturn stylexwb_sheet.write(0, 0, title.format(year_month), create_style())  # 写入头部标题,内容是“xxxx-xx-各部门员工数据总览”,样式是 宋体 大小24 垂直水平居中for info in all_info:  # 循环所有的部门信息,全部写入到文件中xwb_sheet.write(current_row, 0, info[0])xwb_sheet.write(current_row, 1, info[1])xwb_sheet.write(current_row, 2, info[2])xwb_sheet.write(current_row, 3, info[3])xwb_sheet.write(current_row, 4, info[4])current_row = current_row + 1
xwb.save(title.format(year_month) + '.xls')  # 最后保存,文件名是 xxxx-xx-各部门员工数据总览.xls

这个代码是基于上一个函数代码的,多了部门信息统计和基于模板文件生成”xxxx-xx-各部门员工数据总览.xls“的统计文件

以上就是本次任务的实现过程。结合代码块1和代码块3,就是完整的代码块。

源码中有文中的全部代码文件,包含“批量生成财务报表.ipynb”的代码文件,可以自动生成任意多个部门和任意多个员工的财务文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36331.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

妙用EXECEL与JMAIL发送员工工资条

妙用EXECEL与JMAIL发送员工工资条 在实际的工作当中,有许多小规模的单位总是采用EXCEL来做员工工资,因为EXCEL中有许多公式可以用,只填入当月变动的项目,扣税、最终实发工资等项目就自动计算出来了。做出工资了有好多单位财务人员…

用Excel做了7天报表,这个领导喜欢的可视化工具,只用了7小时

以前我在某外企银行实习的时候,需要处理将近七年的财务报表,如果按照传统的方式,我估计七天七夜都处理不完,就更别提分析了。一般来说外企的电脑软件限制非常严格,有专门的IT把控。很多软件是下不了的,即使…

员工每月工资数据集可视化分析

前言 最近在学习《从零开始学Python数据分析》这本书,第六章的综合实例——巴尔的摩公务员工资数据集,原网站上数据集被清除,于是在Kaggle上寻找了相似的数据“Employee_monthly_salary.csv”进行可视化数据分析。 工作环境 系统&#xff…

android app图标长按展示快捷方式 Shortcuts 类似3d touch

android 长按图标展示快捷方式 文章目录 android 长按图标展示快捷方式1. 静态创建2. 动态创建 首先,这不是一个新功能了,在android 7.1的时候就已经支持创建快捷入口了。因为当时项目用不到也没关注过这块,现在很多应用都支持长按展示快捷入…

苹果手机的计算机怎么设置快捷键大全,苹果Macbook快捷键使用大全,超详细!...

苹果电脑Macbook快捷键如何使用?很多小伙伴经常询问小编有关于苹果电脑的相关问题,其实很多快捷键都可以提高生产力,那么接下来一起看看苹果Macbook快捷键使用大全! 苹果电脑Macbook快捷键大全: 一、将键盘当作鼠标使用…

最全Mac系统快捷键一览

Mac中主要有四个修饰键,分别是Command,Control,Option和Shift。 这四个键分别有自己的图案,他们经常出现在Mac应用程序中的菜单栏里,方便你随时学习新的快捷键。 MAC 键盘快捷键符号图例 通用 Command是Mac里最重要的…

苹果Macbook快捷键使用大全

苹果电脑Macbook快捷键如何使用?很多小伙伴经常询问小编有关于苹果电脑的相关问题,其实很多快捷键都可以提高生产力,那么接下来一起看看苹果Macbook快捷键使用大全! 苹果电脑Macbook快捷键大全: 一、将键盘当作鼠标使用…

消除macbook桌面快捷键图标上的箭头

修改/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ 路径下的AliasBadgeIcon.icns如下图: 修改AliasBadgeIcon.icns 名称为AliasBadgeIcon-no.icns 但是坑爹的右键没有重命名选项 于是想着在终端修改文件名 打开终端sudo -i切换到root模…

iOS APP添加桌面快捷方式

本文字数:13900字 预计阅读时间:35 分钟 iOS APP添加桌面快捷方式 背景 新接到一个需求,需要APP内的某些功能,能够把入口添加到桌面,点击桌面到入口可以直接跳转APP对应界面(类似于下面这张示例图&#xff…

mac快捷键标志 ,图案,图标, 常用快捷键

Mac中主要有四个修饰键,分别是Command,Control,Option和Shift。这四个键分别有自己的图案 . Command-Z 撤销  Command-X 剪切   Command-C 拷贝(Copy)   Command-V 粘贴   Command-A 全选(All&…

ShortcutManager桌面app图标长按快捷入口

1.动态方式实现 1.kotlin版代码 1.1 直接实现 对应代码: fun shortcut(){if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.N_MR1) {val scManager: ShortcutManager getSystemService(ShortcutManager::class.java)//跳转Secondval…

MAC OSX 快捷方式更换图标

1、MAC OSX快捷方式创建图标 右键快捷方式——显示简介 将你的icon图片文件(大小为128x128像素)拖入当前图标位置 2、修改你的icon图标文件 有时你会需要让你的桌面图标看起来更加统一,这时你就需要修改你的图标 打开PS,新建1…

正大国际期货:用狼性思维参与外盘期货

投资源于生活,而生活启示了投资交易的方法。因为我们知道在地球上,除了人类,狼应该是最聪明智慧的动物了,那么在狼的智慧中,有怎样的期货投资启示呢?下面正大IxxxuanI详细给大家讲解一下! 1、当…

欧元区通胀率升至9.1% 将跟随美联储“鹰派”步伐?如何使资产保值成为现实需要

欧盟统计局数据显示,由于能源和食品价格持续飙升,欧元区8月调和CPI同比上升9.1%,距离两位数通胀近在咫尺。 伴随着通胀数据屡创新高,摩根大通、高盛和美国银行的分析师均预计,欧央行将在下周的会议上加息75个基点&…

外汇天眼:美联储认为美国房价有大跌的风险!

美联储周五表示,在超低利率的背景下,近年来房价大幅上涨后,高位房价可能会急剧下跌。 “由于估值处于高位,房价可能对冲击特别敏感,”美联储在周五发布的半年度金融稳定报告中表示。 央行表示,尽管最近随…

股票和外汇究竟哪个更存在风险呢?

股票和外汇究竟哪个更存在风险呢? 1、股票T1交易制度,今天买入,明天才能卖出;外汇T0交易制度,随时买入,随时可以卖出。流动性方面看,外汇风险较小。 2、外汇手续费很低,只有买入时扣…

外汇天眼:美元多头仍在掌控中 美联储将加大鹰派立场力度

美元多头不太可能在短期内被推翻,因为美联储(fed)可能会在其普遍预期的加息之后,在本周发表强硬言论,这可能迫使交易员重新考虑利率在见顶前能达到多高。 衡量美元兑一篮子六种主要货币贸易加权汇率的美元指数下跌0.1%,至109.44点…

外汇天眼:美国中期选举共和党若大获全胜!美元未来走势不利

周二,美元企稳,因为交易员们展望美国中期选举,而中国放松对冠状病毒的限制的兴奋情绪有所减弱,这一直在提振投资者人气,并令避险的美元承压。 中期选举的最终结果可能需要几天的时间,但预测显示&#xff0c…

外汇天眼:利空美元!2023年美国经济将如履薄冰?各大银行预测整体不乐观!

高盛表示,美国经济可能避免衰退。摩根士丹利预计,美国经济在2023年只是避开了衰退,但着陆并不那么软。瑞士信贷认为,美国明年可以避免经济下滑。摩根大通警告称,明年很有可能出现经济衰退。美国银行预测2023年第一季度…

理财实践之港股和美股的投资办法、下篇

文章目录 一、美股投资的主要风险有:二、投资美股的注意事项三、选出好公司四、等待好价格五、举例 一、美股投资的主要风险有: 市场风险 – 因股市价格大幅下跌导致股票投资者亏损的风险。这是很正常的市场行为,对于普通投资者来说这是风 …