最近看视频学习,老师布置了个作业,关于如何使用python将多个excel进行合并,老师写的代码我感觉比较复杂,下面是我自己改良之后较简单的方式。
实现这个功能主要有两种方法,一种是用xlwd,xlsxwriter库结合,不管是xlsx,xls都是适用的;另一种是openpyxl,这个库只对xlsx有效。
本文针对第一种方式进行讲解。
首先准备三个excel文件,目的是将三个excel的sheet进行合并:

test_excel1.xlsx

为了简化测试,另外两个excel文件test_excel2.xlsx, test_excel3.xlsx的内容跟第一个excel是一致的。

下面是代码部分

– coding:utf-8 –

import xlrd,xlsxwriter

待合并excel

allxls=[“E:\python3_hellobi_work\excel\test_excel\test_excel1.xlsx”,
“E:\python3_hellobi_work\excel\test_excel\test_excel2.xlsx”,
“E:\python3_hellobi_work\excel\test_excel\test_excel3.xlsx”]

目标excel

end_xls=”E:\python3_hellobi_work\excel\test_excel\final_excel.xlsx”

def open_xls(file):
try:
fh=xlrd.open_workbook(file)
return fh
except Exception as e:
print(“打开文件错误:”+e)

根据excel名以及第几个标签信息就可以得到具体标签的内容

def get_file_value(filename,sheetnum):
rvalue=[]
fh=open_xls(filename)
sheet=fh.sheets()[sheetnum]
row_num=sheet.nrows
for rownum in range(0,row_num):
rvalue.append(sheet.row_values(rownum))
return rvalue

获取第一个excel的sheet个数以及名字作为标准

first_file_fh=open_xls(allxls[0])
first_file_sheet=first_file_fh.sheets()
first_file_sheet_num=len(first_file_sheet)
sheet_name=[]
for sheetname in first_file_sheet:
sheet_name.append(sheetname.name)

定义一个目标excel

endxls=xlsxwriter.Workbook(end_xls)

all_sheet_value=[]

把所有内容都放到列表all_sheet_value中

for sheet_num in range(0,first_file_sheet_num):
all_sheet_value.append([])
for file_name in allxls:
print(“正在读取”+file_name+”的第”+str(sheet_num+1)+”个标签…”)
file_value=get_file_value(file_name,sheet_num)
all_sheet_value[sheet_num].append(file_value)

print(all_sheet_value)

num=-1
sheet_index=-1

将列表all_sheet_value的内容写入目标excel

for sheet in all_sheet_value:
sheet_index+=1
end_xls_sheet=endxls.add_worksheet(sheet_name[sheet_index])
num+=1
num1=-1
for sheet1 in sheet:
for sheet2 in sheet1:
num1+=1
num2=-1
for sheet3 in sheet2:
num2+=1
#print(num,num1,num2,sheet3)
#在第num1行的第num2列插入sheet3内容
end_xls_sheet.write(num1,num2,sheet3)

记得要关闭文件

endxls.close()

———————————————-end————————————————————–

运行代码,看看目标excel:

两个excel已经合并到一起了。
哈哈。写完啦~~~

版权声明:本文为zlhuan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/zlhuan/p/8011270.html