python如何读取多个excel合并到一个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 · 百度知道合伙人官方认证企业
思路
利用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:
运行结果:
您好,看了您的源码和结果,想请问下您这样实现方式可以保存原excel样式吗?(包括字体大小粗细颜色填充等)因为我需要实现包括样式和内容的全部拷贝