本章介绍openpyxl和os的应用——把多个excel文件合并成一个sheet表。在我文件夹下方有4个需要合并的文件,每个文件的模板都是一样的(前提)。
很简单,之需要在上一篇的基础上加点代码和进行一点修改,遍历每个文件即可。而遍历出每一个文件,看过我os篇的应该都知道,在同一文件夹下,只需要用os.listdir()即可。一步一步来,如果急的朋友可以直接滑到后面看全部的代码。
import openpyxl,os
os.chdir(r"D:\临时\python试验\openpyxl\多文件合并") # 设置默认路径。只有设置了默认路径,下方才可以直接写文件f,否则要加上路径
for f in os.listdir():
file = openpyxl.load_workbook(f) # 读取每个文件
sheets = file.worksheets # 获取该文件的所有表
for sheet in sheets:
for row in sheet.iter_rows(2,sheet.max_row,1,sheet.max_column):
row_list = [i.value for i in row]
row_list = [f.split('.')[0]] + row_list # 把xxx区加在最前面,以方便查看合并后是数据是哪个区
print(row_list)
成功遍历出所有文件所有表格的每一行,然后把这些行写入新文件即可。最终代码是:
import openpyxl,os
new_file = openpyxl.Workbook() # 新建一个文件用于存放合并后的数据
st = new_file.create_sheet('合并后')
st.append(['班级','姓名','语文','数学','英语','综合科']) # 把表头加上
os.chdir(r"D:\临时\python试验\openpyxl\多文件合并") # 设置默认路径。只有设置了默认路径,下方才可以直接写文件f,否则要加上路径
for f in os.listdir():
file = openpyxl.load_workbook(f) # 读取每个文件
sheets = file.worksheets # 获取该文件的所有表
for sheet in sheets:
for row in sheet.iter_rows(2,sheet.max_row,1,sheet.max_column):
row_list = [i.value for i in row]
row_list = [f.split('.')[0]] + row_list # 把xxx区加在最前面,以方便查看合并后是数据是哪个区
st.append(row_list) # 把行写入st表里
new_file.remove(new_file['Sheet']) # 删除创建new_file文件时默认产生的Sheet表
new_file.save(r"D:\临时\python试验\openpyxl\多文件合并.xlsx")
全部汇总完成。可以说openpyxl 的精髓在于迭代 iter_rows,该库对数据的操作基本都需要迭代出来,再重写。
汇总表格的前提是模板都一样,然后根据表格的样式,选定需要汇总的区域进行迭代重写。如果模板不一样,全部行重新汇总到一个表里,能实现,但是又有什么意义,比如某列是姓名,但某个表格该列是学号,最终都汇总到同一列就没有意义了。
本文excel文件:链接:https://pan.baidu.com/s/1UH5fpdTVNggGj-8pa5cGsQ?pwd=pold
提取码:pold