Python-将多个excel表格里的内容合并到一个文件中

要求:使用第三方模块操作,比如xlrd、xlwt等,还需要注意一个excel中有多个sheet,也需要合并。

xlrd:

          读取表格里的内容

          xlrd模块中的一些常用的方法:Python中xlrd常用用法整理

xlwt与xlsxwriter:

          将对应的信息写进表格里面,任选其一都可,但这两个模块都不支持修改表,无法实现追加写入。

          两种思路解决:

                    A.换成其他模块:比如openpyxl等,这个模块可追加写入。

                    B.仍然使用xlwt与xlsxwriter等模块。要先将每次读取的信息存储到List列表中,然后,最后一次写入。

这里采用方案B进行:

先安装xlwt和xlsxwriter模块,这两个模块的安装是第三方模块的安装,我们选择pip方式安装。

安装过程中,出现了一些问题,pip要先升级到最新版本,但我在升级的时候一直出现错误,在网上查了查,应该是管理员权限的问题,然后用管理员权限打开cmd,再升级pip,升级成功。

之后再通过指令安装模块,指令格式是 pip install 模块名,即可安装。

先把代码贴一下然后在具体分析:

import xlrd,xlsxwriter
#设置要合并的所有文件
allxls = ["D:\\learning materials\\python\\30小时\\文件\\1.xls","D:\\learning materials\\python\\30小时\\文件\\2.xls","D:\\learning materials\\python\\30小时\\文件\\3.xls"]
#设置合并到的文件
endxls = "D:\\learning materials\\python\\30小时\\文件\\cndxls.xls"

#打开表格
#建立自定义函数,并进行异常处理(为了使程序不会异崩溃)
def open_xls(file):
	try:
		fh = xlrd.open_workbook(file)#使用open_workbook方法去打开文件,打开后,直接返回。
		return fh
	except Exception as e:
		print(str("打开出错,错误为:"+e))
		
#获取所有sheet
#自定义函数
def getsheet(fh):
	return fh.sheets()
	
#获取某个sheet的行数
def getnrows(fh,sheet):
	table = fh.sheets()[sheet]
	content = table.nrows
	return content

#读取某个文件的内容并返回所有行的值
def getfilect(fh,fl,shnum):
	fh = open_xls(fl)
	table = fh.sheet_by_name(shname[shnum])
	num= getnrows(fh,shnum)
	lenrvalue = len(rvalue)
	for row in range(0,num):
		rdata = table.row_values(row)
		rvalue.append(rdata)
	#print(rvalue[lenvalue:])
	filevalue.append(rvalue[lenrvalue:])
	return filevalue

#存储所有读取的结果
filevalue = []
#存储一个标签的结果
svalue = []
#存储一行结果
rvalue = []
#存储各sheet名
shname = []

#读取第一个待读文件,获得sheet数
fh = open_xls(allxls[0])
sh = getsheet(fh)
x = 0
for sheet in sh:
	shname.append(sheet.name)
	svalue.append([])
	x+=1
#依次读取各sheet的内容
#依次读取个文件当前sheet的内容
for shnum in range(0,x):
	for fl in allxls:
		print("正在读取文件:"+str(fl)+"的第"+str(shnum)+"个标签的...")
		filevalue = getfilect(fh,fl,shnum)
	svalue[shnum].append(filevalue)
	#print(svalue[0])
	#print(svalue[1])
#由于append具有叠加关系,分析可得所有信息均在svalue[0][0]中存储
#svalue[0][0]元素数量为sheet标签数(sn)*文件数(fn)
sn =x
fn = len(allxls)
endvalue = []
#设置一个函数专门获取svalue里面的数据,即获取各项标签的数据
def getsvalue(k):
	for z in range(k,k+fn):
		endvalue.append(svalue[0][0][z])
	return endvalue
		
#打开最终写入的文件
wbl = xlsxwriter.Workbook(endxls)
#创建一个sheet工作对象
ws = wbl.add_worksheet()
polit = 0
linenum = 0
#依次遍历每个sheet中的数据
for s in range(0,sn*fn,fn):
	thisvalue = getsvalue(s)
	tvalue = thisvalue[polit:]
	#将一个标签的内容写入新文件中
	for a in range(0,len(tvalue)):
		for b in range(0,len(tvalue[a])):
			for c in range(0,len(tvalue[a][b])):
				#print(linenum)
				#print(c)
				data = tvalue[a][b][c]
				ws.write(linenum,c,data)
			linenum+=1
	#叠加关系,需要设置分割点
	polit = len(thisvalue)
wbl.close()

之前的1,2,3表格内容:

1-sheet1                                                           1-sheet2

      

2-sheet1                                                         2-sheet2

         

3-sheet1                                                          3-sheet2

          

合并后:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

         

 

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值