说明
1、xlwt模块是非附加写入的.xls模块,所以要一次性写入for循环和列表,这样就没有额外和非额外的说法了。
2、将Excel表合并,将每个Excel表作为行,即行合并,换个思路,将Excel表中的标签作为列,可以进行列合并,即将不同文件中相同标签组成的不同标签合并,可先将不同文件中相同标签合并,将不同文件中相同标签组成列表,然后将前面组成的不同标签合并,即可获得Excel文件的全部内容。
实例
#xlrd和xlwt模块的导入 #读取xlrd模块.XLSExcel文件模块,XLWT模块是以非附加方式编写的。.Excel文件的模块 importxlrd,xlwt #导入要读的文件的路径 a=["C:/Users/Desktop/m1.xls","C:/Users/Desktop/m2.xls"] #定义要写的文件的路径 b="C:/Users/Desktop/m3.xls" #定义函数,判断打开文件是否异常 defopen(fileaddress): try: #open_通过xlrd模块workbook()方法,打开Excel文件,将变量fo定义为文件句柄 fo=xlrd.open_workbook(fileaddress) returnfo exceptExceptionase: print("error!"+str(e)) #定义函数,在Excel文件下获得某个标签的行数 defgetrows(fo,num): table=fo.sheets()[num] #sheets()函数是xlrd模块自带的函数,Excel文件的标签可以列表的形式返回 n=table.nrows #nrows为xlrd模块带来自己的函数,通过调用某个标签可以获得该标签的行数 returnn """ 定义函数可以通过Excel文件路径和标签的序列号获得 任何Excel文件任何标签的内容,并以列表的形式返回 """ defgetsheetcontents(fileaddress,num): avalue=[] fo=open(fileaddress) table=fo.sheets()[num] n=table.nrows foriinrange(0,n): """ row_values()函数是xlrd模块自带的函数,通过某个标签调用, 以列表形式返回标签的行数据,标签中 列为列表的元素 """ rdate=table.row_values(i) avalue.append(rdate) returnavalue svalue=[] k=[] #所有Excel文件的标签数都是通过for循环获得的,并以列表的形式返回 foriina: fo=open(i) k.append(len(fo.sheets())) #对这些标签进行升序排序 k.sort() #将这些Excel文件中不同标签的所有内容通过for循环放入列表svalue中 foriinrange(0,k[len(k)-1]): #将不同Excel文件的同一标签放在列表bvalue中,通过for循环 bvalue=[] forjina: print("正在读取"+str(j)+"的第"+str(i)+"个标签") bvalue.append(getsheetcontents(j,i)) svalue.append(bvalue) #Svalue是所有Excel文件的内容 #Workbook()通过xlwt模块创建一个.xls文件将变量fw定义为文件句柄 fw=xlwt.Workbook() line=0 #add_sheet()函数是xlwt模块自带的函数,可以得到一个自定义的标签 #将变量ws定义为标签句柄 ws=fw.add_sheet("sheet1") """ svalue列表通过for循环,最后得到的 在新标签中写入某个标签、某个文件、某个行列的数据 """ foriinrange(0,len(svalue)): forjinrange(0,len(svalue[i])): forminrange(0,len(svalue[i][j])): forninrange(0,len(svalue[i][j][m])): ws.write(line,n,svalue[i][j][m][n]) #通过line可以获得不断增加的行数 line+=1 print("合并完成") #save()函数为xlwt自带函数,将合并的excel文件保存在一定路径下 fw.save(b) #没有close()函数的xlrd模块和xlwt模块,即使用这两个模块打开文件,也不需要关闭文件
以上是Python整合多个sheet表的方法,希望对大家有所帮助。更多Python学习指导:基础教程python基础教程
本教程的操作环境:windows7系统,Python 3.9.1,DELL G3电脑。