python如何读取多个excel合并到一个excel中

网上找了很多资料了,我已经使用xlwt+xlrd+xlutils实现了内容+格式的完全拷贝,但仅仅只能处理一个excel,想要多个合并为一个就不行(以追加写的形式),格式... 网上找了很多资料了,我已经使用xlwt+xlrd+xlutils实现了内容+格式的完全拷贝,但仅仅只能处理一个excel,想要多个合并为一个就不行(以追加写的形式),格式就会乱,这里先贴上目前的代码吧。有没有人帮帮我解决下这个问题。代码如下:
# -*- coding: utf-8 -*-
import xlrd,xlwt
from os import listdir
from os.path import isfile, join, splitext
from xlutils.filter import process, XLRDReader, XLWTWriter

input_file = 'E:\\demo\\read_test01.xls'
output_file = 'E:\\demo\\write_test.xls'
path = 'E:\\demo'
oldrows = 0

def copy2(r_file):
global oldrows
'''
附带样式的copy
  xlrd打开文件,必须加参数formatting_info=True
'''
w = XLWTWriter()
process(
XLRDReader(r_file,'unknown.xls'),
w
)
w_file, style_list = w.output[0][1], w.style_list
w_sheet = w_file.get_sheet(0)
r_sheet = r_file.sheet_by_index(0)
rows = r_sheet.nrows #获取行数
cols = r_sheet.ncols #获取列数
for row in range(rows):
for col in range(cols):
xf_index = r_sheet.cell_xf_index(row, col)
value=r_sheet.cell(row,col).value
w_sheet.write(row, col, value, style_list[xf_index])
oldrows += rows + 1
return w_file

def get_files(path,file_list):
for file in listdir(path):
file_path = join(path, file)
if isfile(file_path) == True and splitext(file_path)[1] == '.xls':
file_list.append(file_path)

if __name__ == "__main__":
file_list = []
# wb = xlwt.Workbook()
# ws = wb.add_sheet('My Worksheet')
get_files(path,file_list)
for input_file in file_list:
rb = xlrd.open_workbook(input_file, formatting_info=True)
wb = copy2(rb)
wb.save(output_file)
对了,代码有部分忘记删了,input_file = 'E:\\demo\\read_test01.xls'这句没用,真正输入是path = 'E:\\demo'这句,表示存放的所有输入文件的路径
展开
 我来答
育知同创教育
2018-01-10 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

思路 
利用python xlrd包读取excle文件,然后将文件内容存入一个列表中,再利用xlsxwriter将内容写入到一个新的excel文件中。

完整代码

# -*- coding: utf-8 -*-#将多个Excel文件合并成一个import xlrdimport xlsxwriter#打开一个excel文件def open_xls(file):
fh=xlrd.open_workbook(file)    return fh#获取excel中所有的sheet表def getsheet(fh):
return fh.sheets()#获取sheet表的行数def getnrows(fh,sheet):
table=fh.sheets()[sheet]    return table.nrows#读取文件内容并返回行内容def getFilect(file,shnum):
fh=open_xls(file)
table=fh.sheets()[shnum]
num=table.nrows    for row in range(num):
rdata=table.row_values(row)
datavalue.append(rdata)    return datavalue#获取sheet表的个数def getshnum(fh):
x=0
sh=getsheet(fh)    for sheet in sh:
x+=1
return xif __name__=='__main__':    #定义要合并的excel文件列表
allxls=['F:/test/excel1.xlsx','F:/test/excel2.xlsx']    #存储所有读取的结果
datavalue=[]    for fl in allxls:
fh=open_xls(fl)
x=getshnum(fh)        for shnum in range(x):
print("正在读取文件:"+str(fl)+"的第"+str(shnum)+"个sheet表的内容...")
rvalue=getFilect(fl,shnum)    #定义最终合并后生成的新文件
endfile='F:/test/excel3.xlsx'
wb1=xlsxwriter.Workbook(endfile)    #创建一个sheet工作对象
ws=wb1.add_worksheet()    for a in range(len(rvalue)):        for b in range(len(rvalue[a])):
c=rvalue[a][b]
ws.write(a,b,c)
wb1.close()
print("文件合并完成")1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162

源文件excel1:

源文件excel2: 
 

运行结果:

合并后的excel3: 

追问
您好,看了您的源码和结果,想请问下您这样实现方式可以保存原excel样式吗?(包括字体大小粗细颜色填充等)因为我需要实现包括样式和内容的全部拷贝
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式