前言:
现时小伙伴们对“python处理表格数据 数据统计表”大概比较关心,我们都想要了解一些“python处理表格数据 数据统计表”的相关知识。那么小编同时在网上网罗了一些对于“python处理表格数据 数据统计表””的相关知识,希望小伙伴们能喜欢,大家快快来学习一下吧!#Python财务工具#
#Python将工资统计表处理成为工资条#
很多小企业没有公司内部的财务平台,在处理员工工资的时候还是采用Excel表格进行统计,每当到发工资和工资条的时候,需要将每个人的工资明细表头及工资数额复制多次做成工资条样式,再打印裁剪并分发。这样对于财务人员来说,费时费力。故本人在借鉴朋友一个复杂工时统计表编写该程序。处理结果如下两表。
处理前的表格
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
1
周某
2021
2
15
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
武某
2021
2
15
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
3
王某
2021
2
15
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
李某
2021
2
15
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
5
商某
2021
2
16
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
6
何某
2021
2
17
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
7
冯某
2021
2
18
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
8
元谋
2021
2
19
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
9
刘某
2021
2
19
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
10
赵某
2021
2
19
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
11
张某
2021
2
19
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
12
孙某
2021
2
19
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
处理后的表格
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
1
周某
2021
2
15
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
2
武某
2021
2
15
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
3
王某
2021
2
15
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
4
李某
2021
2
15
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
5
商某
2021
2
16
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
6
何某
2021
2
17
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
7
冯某
2021
2
18
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
8
元谋
2021
2
19
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
9
刘某
2021
2
19
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
10
赵某
2021
2
19
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
11
张某
2021
2
19
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
上海分公司工资发放明细
序号
姓名
会计年度
会计期间
职务级别
职务工资
级别工资
工龄补贴
司龄补贴
应发合计
个人养老缴费
个人医疗缴费
个人失业缴费
公积金个人缴存
补充公积金个人缴存
年金个人缴存
代扣上个月税
本月扣款合计
工资实发金额
赡养父母专项累计
子女教育专项累计
住房贷款专项累计
累计已扣税
月度工资分配
绩效应发金额
绩效实发金额
总实发合计
签字
12
孙某
2021
2
19
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Python源代码如下:
from openpyxl import Workbook, load_workbookfrom openpyxl.styles import fills,colors,NamedStyle,Font,Side,Border,PatternFill,Alignment,Protectionimport openpyxlimport datetimeimport sys"""先用一个类来实现一些表格的操作"""class ExcelUtils(): """获取Excel表格内容""" # def __init__(self,excelfilepath,sheet_name): # print(excelfilepath, sheet_name) # self.excelfilepath = excelfilepath # excelfilepath 为excel文件的完整路径 # self.sheet_name = sheet_name #sheet_name为excel表的sheet名称 # self.ws = self.getsheet() #python的类可以在初始化方法中调用类的其他方法 def __init__(self, excelfilepath): print(excelfilepath) self.excelfilepath = excelfilepath # excelfilepath 为excel文件的完整路径 self.ws = self.getsheet() # python的类可以在初始化方法中调用类的其他方法 def getsheet(self): self.wb = openpyxl.load_workbook(self.excelfilepath, data_only=True) # 获取整个excel表对象 sheet_names = self.wb.sheetnames ws = self.wb[sheet_names[len(sheet_names) - 1]] return ws def get_row_count(self): row_count =self.ws.max_row #获取当前sheet的最大行数 return row_count def __get_cell_value(self,row_index, col_index): # def get_cell_value(self, row_index, col_index): cell_value = self.ws.cell(row_index,col_index).value # 根据入参的值获取单元格的数据,两个下划线表示类的私有化方法 return cell_value def get_colum_count(self): colum_count =self.ws.max_column #获取当前sheet的最大列数 return colum_count def get_merged_info(self): # 获取合并单元格的坐标范围,例如:“C1: D2” merged_info = self.ws.merged_cells return merged_info def get_merged_cell_value(self,row_index, col_index): """ 既能获取普通单元格的数据又能获取合并单元格数据 row_index和col_index,最小行和最小列请传1 该方法的原理为将合并单元格的范围都视为获取合单元格左上角第一个普通单元格的值 """ cell_value = None mergedlist = self.get_merged_info() for merged in mergedlist: # 将获取到的单元格对象拆分为四个值 row_start, row_end, colum_start, colum_end = merged.min_row, merged.max_row, merged.min_col, merged.max_col if row_index >= row_start and row_index <= row_end: if col_index >= colum_start and col_index <= colum_end: cell_value = self.__get_cell_value(row_start, colum_start) break # 防止循环去进行判断出现值覆盖的情况。找到了想要的值,就不能再继续找了,必须直接跳出循环,返回出去 else: cell_value = self.__get_cell_value(row_index, col_index) else: cell_value = self.__get_cell_value(row_index, col_index) return cell_value # 返回的就是合并单元的值,为字符串类型 def get_first_row(self): # 获取第一行的数据 columns = excelutils.ws.max_column #获取最大列数 rowdata = [] for i in range(1, columns + 1): # range函数的结束数字本身并不执行,所以需要+1 cellvalue = excelutils.ws.cell(row=1, column=i).value rowdata.append(cellvalue) print(rowdata) return rowdata def get_sheet_data_by_dict(self): #将整个sheet列表除了第一行以外的内容全部作为字典的值进行储存 rowdata = self.get_first_row() all_sheet_value_dict = [] for row in range(1, self.ws.max_row ): valuedict = {} for col in range(1, self.ws.max_column + 1): valuedict[rowdata[col - 1]] = self.get_merged_cell_value(row + 1, col) all_sheet_value_dict.append(valuedict) return all_sheet_value_dict def save_excle(self): self.wb.save(self.excelfilepath)excel_name = "XXXXXXXX中国XX上海中心工资条.xlsx"salarysheet = ExcelUtils(excel_name)'''获取合并的单元格内容,保存在title_head里面'''title_head = []title_head.append(salarysheet.get_merged_cell_value(1, 1))# print(title_head)'''获取第二行工资详细项'''item_head=[]for i in range(1,salarysheet.get_colum_count()+1): item_head.append(salarysheet.get_merged_cell_value(2,i))# print(item_head)'''获取每个单元格的内容保存在num_list'''num_list = []for i in range(3, salarysheet.get_row_count()+1): for j in range(1, salarysheet.get_colum_count()+1): num_list.append(salarysheet.get_merged_cell_value(i, j))# print(num_list)#保存写操作process_time = datetime.datetime.now()date_str = process_time.strftime('%Y%m%d%H%M%S')ws2 = salarysheet.wb.create_sheet("中国XX上海中心个人工资条" + date_str, 0)"""先找一个字体的模板"""my_alignment = Alignment( horizontal = 'general', # 水平:常规 vertical = 'bottom', # 垂直:底部对齐 text_rotation = 0, # 文本方向:0度 wrap_text = False, # 自动换行 shrink_to_fit = False, # 缩小字体填充 indent = 0 # 缩进0 )"""定义好大标题和小标题的字体样式"""font = Font('黑体', size=12, color=colors.BLACK, bold=False)font_items = Font('黑体', size=10, color=colors.BLACK, bold=False)"""设置合并单元格并写入数据和更改字体样式"""my_alignment1 = Alignment(horizontal='center', vertical='center', wrap_text = True)for i in range(1, (salarysheet.get_row_count()-2)*4, 4): ws2.merge_cells(start_row=i, start_column=1, end_row=i, end_column=28) ws2.cell(i, 1).alignment = my_alignment1 ws2.cell(i, 1).font = font ws2.cell(i, 1).value = title_head[0] ws2.merge_cells(start_row=i+3, start_column=1, end_row=i+3, end_column=28)"""写入单个单元格的数据并设置样式"""index_num_data = 0for row in range(1, (salarysheet.get_row_count()-2)*4, 4): for i in range(1, salarysheet.get_colum_count()+1): ws2.cell(row+1, i).alignment = Alignment(horizontal='center', vertical='center', wrap_text=True) ws2.cell(row+1, i).font = font_items ws2.cell(row+1, i).value = item_head[i-1] ws2.cell(row+2, i).alignment = Alignment(horizontal='center', vertical='center', wrap_text=True) ws2.cell(row+2,i).font=font_items ws2.cell(row+2, i).value = num_list[index_num_data] index_num_data += 1"""设置某些指定单元格的宽度"""letter_A = chr(65)letter_B = chr(66)ws2.column_dimensions[chr(65)].width = 12ws2.column_dimensions[letter_A+letter_B].width = 14salarysheet.save_excle()print('完成!')
欢迎点赞,评论,转发,交流。您的支持就是我的动力,谢谢。
标签: #python处理表格数据 数据统计表