⼿把⼿教你4种⽅法⽤Python批量实现多Excel多Sheet合并⼀、前⾔
⼤家好,我是程序媛柚柚。前两天给⼤家分享了Python⾃动化⽂章:,⽽后在Python进阶交流⾥边有读者遇到⼀个问题,他有很多个Excel表格,他需要对这些Excel⽂件进⾏合并。
如果⼤家在学习中遇到困难,想⼀个python学习交流环境,可以加⼊我们的QQ:721195303,关注⼩编,会节约很多时间,减少很多遇到的难题。
诚然,⼀个⼀个打开复制粘贴固然可⾏,但是该⽅法费时费⼒,还容易出错,⼏个⽂件还可以⼿动处理,要是⼏⼗个甚⾄上百个,你就抓瞎了,不过这问题对Python来说,so easy,⼀起来看看吧!
⼆、项⽬⽬标
⽤Python实现多Excel、多Sheet的合并处理。
三、项⽬准备
软件:PyCharm
需要的库:pandas, xlrd,os
四、项⽬分析
1)如何选择要合并的Excel⽂件?
利⽤os,获取所有要合并的Excel⽂件。
2)如何选择要合并的Sheet?
利⽤xlrd库进⾏Excel读取,获取要合并的Sheet名。
3)如何合并?
利⽤pandas库,对所有Sheet名逐⼀循环打开,通过concat()进⾏数据追加合并即可。
4)如何保存⽂件?
利⽤to_excel保存数据,得到最终合并后的⽬标⽂件。
五、项⽬实现
1、第⼀步导⼊需要的库
import pandas as pd
import xlrd
import os
2、第⼆步选择要合并的Excel⽂件
#要合并⽂件路径
path="D:/b/"
#获取⽂件夹下所有EXCEL名
xlsx_names = [x for x in os.listdir(path) dswith(".xlsx")]
3、第三步选择要合并的Sheet
# 获取第⼀个EXCEL名
xlsx_names1 = xlsx_names[0]
aa = path + xlsx_names1
#打开第⼀个EXCEL
first_file_fh=xlrd.open_workbook(aa)
# 获取SHEET名
first_file_sheet=first_file_fh.sheets()
4、第四步对Sheet内容进⾏循环合并
#按SHEET名循环
for sheet_name in sheet_names:
df = None
# 按EXCEL名循环
for xlsx_name in xlsx_names:
sheet_na = pd.ExcelFile(path + xlsx_name).sheet_names
if sheet_name in sheet_na:
#print(sheet_name)
_df = pd.read_excel(path + xlsx_name, sheet_name=sheet_name,header=None) if df is None:
df = _df
else:
df = pd.concat([df, _df], ignore_index=True)
else:continue
5、第五步保存合并后的⽂件
<_excel(excel_writer=writer, sheet_name=sheet_name, encoding="utf-8", index=False) print(sheet_name + " 保存成功!共%d个,第%d个。" % (len(sheet_names),num))
num += 1
writer.save()
writer.close()
六、效果展⽰
1、处理前Excel数据:
2、运⾏进度提⽰:
3、合并后的结果:
七、总结
本⽂介绍了如何利⽤Python对多个Excel⽂件、多Sheet进⾏合并处理,减少了很多复制粘贴的⿇烦,省时省⼒,还不容易出错,代码不多,循环追加有点绕,想想也就明⽩了,不懂的随时留⾔提问,⼤家⼀起学习进步。
有想法的⼩伙伴还可以将⽂章中的代码进⾏打包,做成⼀个exe可执⾏的⼩软件,包装好发给别⼈使⽤,也可以赚点⼩费噢,关于打包的教程这⾥不再赘述,欢迎前往:。
⼋、彩蛋
下⾯两份代码是内⼩伙伴提供了,⼩编也⾃⾏测试了下,亲测有效,欢迎⼤家积极尝试噢!
来⾃友Jayson的代码:
# @Author: hebe
# @Date: 2020-04-18 18:31:03
# @Last Modified by: hebe
# @Last Modified time: 2020-04-18 19:40:48
import os
import glob
import openpyxl
def merge_xlsx_files(xlsx_files):
wb = openpyxl.load_workbook(xlsx_files[0])
ws = wb.active
ws.title = "merged result"
for filename in xlsx_files[1:]:
workbook = openpyxl.load_workbook(filename)
sheet = workbook.active
for row in sheet.iter_rows(min_row=1):
values = [cell.value for cell in row]
ws.append(values)
return wb
#path is very important here , must true.
def get_all_xlsx_files(path):
xlsx_files = glob.glob(os.path.join(r'C:\\Users\\pdcfi\\Desktop\\', '*.xlsx')) sorted(xlsx_files, key=str.lower)
return xlsx_files
def main():
xlsx_files = get_all_xlsx_files(panduser('~lmx'))
wb = merge_xlsx_files(xlsx_files)
wb.save('merged_form.xlsx')
if __name__ == '__main__':
main()
print("all excel append OK!")
来⾃好友刘早起的代码:
from openpyxl import load_workbook, Workbook
import glob
path = "C:\\Users\\pdcfi\\Desktop\\excel\\"
new_workbook = Workbook()
new_sheet = new_workbook.active
# ⽤flag变量明确新表是否已经添加了表头,只要添加过⼀次就⽆须重复再添加flag = 0
for file in glob.glob(path + '/*.xlsx'):
workbook = load_workbook(file)
sheet = workbook.active
coloum_A = sheet['A']
row_lst = []
for cell in coloum_A:
python怎么读取xls文件if cell:
w)
row_lst.w)
if not flag:
header = sheet[1]
header_lst = []
for cell in header:
header_lst.append(cell.value)
new_sheet.append(header_lst)
flag = 1
for row in row_lst:
data_lst = []
for cell in sheet[row]:
data_lst.append(cell.value)
new_sheet.append(data_lst)
new_workbook.save(path + '/' + '符合筛选条件的新表.xlsx')
来⾃友Engineer的代码:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论