赞
踩
Life is short , you need Python .
keyword:excel读取、拆分数据、生成文档
如果不想成为一个循环流水动作的机器人,或许可以想想其他方法。
有时候,慢即是快~
目标:老板丢来全集团员工名单,要求按子公司拆分数据,每个公司一个人员文档,大约100个公司信息,近2w条人员数据。
分解目标:
1、读取文件
2、处理数据
3、保存新文档
01
读取文件
使用模块:openpyxl中的load_workbook、Workbook
读取文件先了解文件的存储路径,读取工作簿,再读取工作簿中的工作表;
由于本工作簿只有一张工作表,我们不需要通过工作表名来获取工作表,通过获取活动工作表就可以。
获取表格的代码如下:
# 导入第三方库,为了后续书写简介,用from...import...方式导入from openpyxl import load_workbook,Workbook# 打开工作簿,获取活动工作表wb = load_workbook('./组织人员数据.xlsx')ws = wb.active
02
处理数据
使用模块:openpyxl中的iter_rows函数
我们观察一下老板丢过来的文件:
首行表头,这是后续生成新文档每个文档都需要的;
from openpyxl import load_workbook,Workbook# 打开工作簿,获取活动工作表wb = load_workbook('./组织人员数据.xlsx')ws = wb.activetitle=['用户名','人员姓名','人员编号','法人实体','组织','部门','职位','职务','工作电话','工作手机号','是否可用','角色名称','角色描述']# 表头获取也可以用iter_rows读取第一行
根据公司名称来拆分数据,对应表格中【法人实体】这一列内容:
如果A员工的法人实体为X公司,他的数据应该被放到X公司的文档中。
1、这意味着需要根据法人实体这一列,创建文档并以此命名;
2、根据法人实体这一列将员工数据逐条分发到对应文档
这一阶段的代码如下:
from openpyxl import load_workbook,Workbooklist=[]# 打开工作簿,获取活动工作表wb = load_workbook('./组织人员数据.xlsx')ws = wb.activefor row in ws.iter_rows(min_row=2,values_only=True): if row[3] not in list: list.append(row[3]) org_wb=Workbook() org_ws=org_wb.active org_ws.append(title) org_ws.append(row) else: org_ws=org_wb.active org_ws.append(row)
为了快速测试,我们可以复制少量数据进行测试,或者过程中用print输出查看,待确认没有问题,我们在使用原数据运行。
03
保存新文档
使用模块:openpyxl中的save函数
这段代码如下:
from openpyxl import load_workbook,Workbookorg_wb.save('./newfile/{}.xlsx'.format(row[3]))
最终我们可以运行,看到文件哗啦啦出现在指定文件夹中:
思考题
- 如果只想筛选出在职人员,怎么优化?
- if...else部分比较冗余,怎么优化?
以上就是全部啦,回到公众号中发送【拆分数据】可以获得源码。
版权声明:转载请附上原文出处及链接。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。