Python自动化办公快速地批量处理Excel内容
前言
Excel 是我们在工作和日常中使用频率很高,平时,我们对一个 Excel 文件中进行操作,手工进行很方便,但问题是,如果我们遇见需要同时操作多个 Excel 文件,就是一件非常耗时的事情了。你可能对每一个 Excel 文件都进行" 打开 - 复制粘贴 - 保存 "循环的机械工作。是不是感觉很枯燥和乏味呢?
今天我带大家学习下,如何用 Python 操作Excel进行批量合并和拆分。想了解快速的使用Python进行批量合并和拆分,那我们首先要知道如何用Python操作Excel文件, 如何用 Python 手工操作一个 Excel 文件?
一、导入excel表格文件处理函数import xlwt
注意 ,这里的xlwt是python的第三方模块,需要下载安装才能使用。(python第三方库的安装也非常简单,打开命令行,输入pip install xxx就可以了pip install xlrd pip install xlwt
其中,xlrd 库支持 Excel 读取,xlwt 库支持 Excel 写入。
二、创建excel表格类型文件book = xlwt.Workbook(encoding="utf-8")
调用xlwt模块中的Workbook方法来创建一个excel表格类型文件,其中的第一个参数是设置数据的编码格式,这里是’utf-8’的形式。
三、在excel表格类型文件中建立一张sheet表单sheet = book.add_sheet("豆瓣电影Top250",cell_overwrite_ok=True)
用book对象调用add_sheet方法来建立一张sheet表,这里面的第一个参数很明显就是设置sheet表格的名称,第二个参数cell_overwrite_ok用于确认同一个cell单元是否可以重设值,这里赋值为True就表示可重设值。
四、自定义列名col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")
用一个元组col自定义列的数量以及各列的属性名,比如我这里是8列,列属性名有"电影详情链接","图片链接"等。
五、将列属性元组col写进sheet表单中for i in range(0,8): sheet.write(0,i,col[i])
很简单,用一个for循环将col元组的元组值(也就是列属性名)写入到sheet表单中。这里调用的是write方法,该方法的第一个参数是行、第二个参数是列、第三个当然就是col元组值。因为这里写进去的是列名,所以都是在第一行。
六、将数据写进sheet表单中datalist = [["www","www图片","西游记","xiyouji","100分","0人","很好","超级棒"],["www2","www图片2","西游记2","xiyouji2","1000分","1人","很棒","一级棒"]] for i in range(0,2): data = datalist[i] for j in range(0,8): sheet.write(i+1,j,data[j])
把数据写进sheet表单里也很简单,先用一个for进行每行写入,在每一行中用第二个for循环把每一行当中的列值写进去。
七、保存excel文件savepath = "excel表格.xls" book.save(savepath)
只需要调用save方法即可保存到自定义的路径下面。
完整代码:import xlwt # 创建excel表格类型文件 book = xlwt.Workbook(encoding="utf-8") # 在excel表格类型文件中建立一张sheet表单 sheet = book.add_sheet("豆瓣电影Top250",cell_overwrite_ok=True) # 自定义列名 col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息") # 将列属性元组col写进sheet表单中 for i in range(0,8): sheet.write(0,i,col[i]) # 将数据写进sheet表单中 datalist = [["www","www图片","西游记","xiyouji","100分","0人","很好","超级棒"],["www2","www图片2","西游记2","xiyouji2","1000分","1人","很棒","一级棒"]] for i in range(0,2): data = datalist[i] for j in range(0,8): sheet.write(i+1,j,data[j]) # 保存excel文件 savepath = "excel表格.xls" book.save(savepath)
运行截图
批量合并:怎样实现 Excel 的合并?
假设你需要对某些工作内容进行问卷调查,一般是先把 Excel 通过工作群分发给所有员工,再把群里收集到的反馈附件汇总成一个文件。
每个员工上交的Excel如下:
名字
第一题
第二题
小红
D
B
名字
第一题
第二题
小方
A
C
你要做的工作是汇总,
名字
第一题
第二题
小红
D
B
小方
A
C
如果是员工人数不多,操作起来还是很方便的。但是当员工数量几万个人时,这将是一件非常费时的事情。
我想你可能会想,有没有什么好的方法呢?那是必然的,可以用Python和相关的第三库实现。我们来看看具体实现过程:
首先,根据上面Excel数据生成过程,我们创建2张Excel表:import xlwt # 创建excel表格类型文件 table = xlwt.Workbook(encoding="utf-8") # 在excel表格类型文件中建立一张sheet表单 sheet = table.add_sheet("sheet1",cell_overwrite_ok=True) # 自定义列名 col = ("名字","第一题","第二题") # 将列属性元组col写进sheet表单中 for i in range(0,3): sheet.write(0,i,col[i]) # 将数据写进sheet表单中 data = ["小方","A","C"] for j in range(0,3): sheet.write(1,j,data[j]) # 保存excel文件 savepath = "excel1.xls" table.save(savepath)
import xlwt # 创建excel表格类型文件 table = xlwt.Workbook(encoding="utf-8") # 在excel表格类型文件中建立一张sheet表单 sheet = table.add_sheet("sheet1",cell_overwrite_ok=True) # 自定义列名 col = ("名字","第一题","第二题") # 将列属性元组col写进sheet表单中 for i in range(0,3): sheet.write(0,i,col[i]) # 将数据写进sheet表单中 data = ["小红","D","B"] for j in range(0,3): sheet.write(1,j,data[j]) # 保存excel文件 savepath = "excel2.xls" table.save(savepath)
好了,我们数据已经准备好了,接下来,看看如何汇总吧!
其工作流程定义为三个步骤:
1. 找到整个工作过程当中重复操作的部分;
2.将重复操作的部分需要哪些手工操作找出来,使用 Python 编写程序代替手工操作的部
分;
3. 对重复的部分,使用循环语句进行批量处理。 import xlrd import xlwt from pathlib import Path, PurePath # 导入excel和文件操作库 # 指定要合并excel的路径 src_path = "/content" # 指定合并完成的路径 dst_file = "结果.xlsx" # 取得该目录下所有的xlsx格式文件 p = Path(src_path) files = [x for x in p.iterdir() if PurePath(x).match("*.xls")] print(files) # 准备一个列表存放读取结果 content = [] # 对每一个文件进行重复处理 for file in files: data = xlrd.open_workbook(file) table = data.sheets()[0] # 取得每一项的结果 answer0 = table.cell_value(rowx=1, colx=0) answer1 = table.cell_value(rowx=1, colx=1) answer2 = table.cell_value(rowx=1, colx=2) temp = f"{answer0},{answer1},{answer2}" # 合并为一行先存储起来 content.append(temp.split(",")) print(temp) # 输出 # 小红,D,B # 小方,A,C # 准备写入文件的表头 table_header = ["名字", "第一题", "第二题"] workbook = xlwt.Workbook(encoding="utf-8") xlsheet = workbook.add_sheet("统计结果") # 写入表头 row = 0 col = 0 for cell_header in table_header: xlsheet.write(row, col, cell_header) col += 1 # 向下移动一行 row += 1 # 取出每一行内容 for line in content: col = 0 # 取出每个单元格内容 for cell in line: # 写入内容 xlsheet.write(row, col, cell) # 向右移动一个单元格 col += 1 # 向下移动一行 row += 1 # 保存最终结果 workbook.save(dst_file)
我使用了 for 语句依次获取 src_path 变量指向的路径下所有的文件。同时,为了避免这个目录里的文件类型过多,我使用一个 if 语句用于条件判断,只提取 .xls 结尾的文件。
合并后的效果如下图:
名字
第一题
第二题
小红
D
B
小方
A
C
批量拆分:怎样实现 Excel 的拆分?
对于批量操作 Excel,还有一种情况是批量拆分。比如很多公司会用 Excel 记录和统计员工的薪水、记录货物信息、记录客户情况等数据。这些数据越来越多之后,文件会越来越大,打开文件和查找速度就会变得很慢,最后只好按照某些列进行 Excel 的拆分。
核心代码如下for line in range(1,employee_number): content = table.row_values(rowx=line, start_colx=0, end_colx=None) # 将表头和员工数量重新组成一个新的文件 new_content = [] # 增加表头到要写入的内容中 new_content.append(salary_header) # 增加员工工资到要写入的内容中 new_content.append(content) # 调用自定义函数write_to_file()写入新的文件 write_to_file(filename = content[1], cnt = new_content)
文件的批量拆分也是通过循环来实现逐行处理的功能的,但是你需要注意拆分以后的要保存的文件名称不要重复,不然很容易导致 Excel 中只有最后一次循环写入的内容。
为什么美国要竭尽全力去封杀海外抖音,只有美国封锁吗其实这个想要理清楚这个原因,单从某个方面某个方面去分析的话,就会显得太为单一且不够充分!1首先你要知道海外版抖音是什么2国外目前的主流媒体渠道(就是民众获取信息的平台)都控制在谁手
又28个!美国实体清单的影响及应对中美科技的巅峰之战据财联社3月3日消息,美国商务部发布公告,以涉及国家安全等无理理由,将28个中国实体列入实体清单,包括第四范式香港华大基因科技服务有限公司浪潮集团龙芯中科盛科通信等。这次被美国列入
黑色霉菌入侵美国小镇,铺天盖地!居民痛苦不堪,有人罹患癌症?最近,林奇堡小镇的遭遇在美国引起了轰动。这座小镇被一种霉菌入侵黑色霉菌笼罩了小镇的每一个角落,铺天盖地地侵入到了所有人的生活之中。一眼望过去,小镇宛如末日废土一般,上上下下都被黑色
福建一小伙来广州玩,花22元点了一份饭,端上来还以为自己看花眼广州又叫作花城或者羊城,除了是广东省的省会,还是一座国家历史文化名城,有着源远流长的文化底蕴和美食底蕴,每年都会吸引无数游客来旅游观光。作为十大美食之都之一,民间一直有食在广州的说
3D打印周报523DSystems被罚2700万美元,麻省理工3D打印心脏等2023年3月5日,3D打印周报第52期,以下是本周3D打印行业发生的事情,包括大事件行业动态趣制造融资上市新产品等内容。大事件罚款2700万美元!3DSystems违反美国对中国
石油美元,该结算了天下苦石油美元久矣,更苦美国霸权久矣。作者崔传刚近日,作为中东产油大国之一的伊拉克宣布,将允许与中国的贸易直接以人民币结算。这一消息引发了全球政经界的高度关注。伊拉克称,此次调整主
对中国逆差3829亿美元,却害怕人民币升值,美国背后盘算什么?一对中国逆差3829亿美元,却害怕人民币升值,美国背后盘算什么?人民币如果大幅度升值,无疑会给中国出口企业带来压力因为人民币升值,也会让中国出口的商品价格贵了,会削弱中国商品的全球
美财富杂志全球超级富豪去年损失10万亿美元美国财富杂志3月2日文章,原题去年,全球超级富豪遭受了10万亿美元的损失,但现在是贪婪的时候了房地产咨询公司莱坊在第17期年度财富报告中写道资产净值高于3000万美元的个人,其传统
广州南沙打造精明增长的高质量样本新华社广州3月3日电(记者陈凯星马晓澄周颖)力争全年地区生产总值增长10以上规上工业产值增长16以上固定资产投资增长30以上这是广州市南沙区定下的2023年发展目标。高速增长背后,
恰到好处的距离,有多远?既非不亲近,也非极亲近恰到好处,把握尺度方能有效随顺众生菩萨恒顺众生,需要和他们保持适度的关系,这点非常重要。把握不好尺度,比如对他人过于热情,会让人产生负担对他人过于冷漠,则会让
桃花之酿头条陌上对白(现代诗一首)远远地又是这样的季节在三月里路上的人们似乎都格外地精神挥一挥手一下子身体就像是生长出了四季月儿在深海里探出了头像是等一场风吹来一阵大风吹来却是雨雨淅淅沥沥