1、自定义表格合并类 CombinMutipleExcelFiles
#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
@FileName :test1.py
@desc :将多个excel文件合并并输出为一个excel文件
@Author :Young
@IDE :PyCharm
@Time :2021/2/20 0020 8:08
'''
#传入读取文件的基本路径,传入最终写入的文件名
import xlrd
import xlwt
import os
class CombinMutipleExcelFiles:
def __init__(self, basePath = '',fileList=[],finalFileName=''):
'''
:param basePath: 所读取的文件所在的文件夹路径,相对路径和绝对路径均可
:param fileList: 读取的文件名的列表
:param finalFileName: 最终的合并文件名
注:默认合并的文件在原来的文件夹下面
'''
self.basePath = basePath
self.fileList = fileList
self.finalFileName = finalFileName
self.rows = 0
#循环读取excel文件,循环写入excel文件
def readAndCombin(self):
resultFile = os.path.join(self.basePath,self.finalFileName) #最终文件的文件名
#新建一个xls对象
workbook = xlwt.Workbook(encoding="utf-8")
#新建一个工作表
worksheet = workbook.add_sheet('sheet1',cell_overwrite_ok=True)
for fileName in self.fileList:
filePath = os.path.join(self.basePath,fileName) #文件完整的路径
#读取Excel
excel = xlrd.open_workbook(filePath)
#获取所有的sheet表名称
sheet_names = excel.sheet_names() #返回的是一个列表
#获取第一个工作表
sheet1 = excel.sheet_by_name(sheet_name=sheet_names[0])
#获取第一个工作表有多少行,多少列
rows = sheet1.nrows
cols = sheet1.ncols
#读取每个单元格的数据然后写入新表
for row in range(rows):
for col in range(cols):
value = sheet1.cell_value(rowx=row,colx=col) #获取原始单元格值
worksheet.write(row+self.rows,col,value) #将单元格的值写入新表
#双循环结束,读取了一个表的内容
self.rows = self.rows + rows #追加写
print(fileName+'读取完毕!')
#保存最终表格
workbook.save(resultFile)
print('表格合并完毕!')
2、对自定义类的使用
#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
@FileName :demo.py
@desc :对封装模块进行测试
@Author :Young
@IDE :PyCharm
@Time :2021/2/20 0020 9:20
'''
from testReadAndCombin.test1 import CombinMutipleExcelFiles
if __name__ == '__main__':
basePath = r'./' #文件所在路径
fileList = ['excel1.xls','excel2.xls'] #所要合并的文件
finalFileName = '汇总表.xls' #合并后输出的文件
newFile = CombinMutipleExcelFiles(basePath=basePath,fileList=fileList,finalFileName=finalFileName)
newFile.readAndCombin()
3、结果
excel.xls读取完毕!
excel.xls读取完毕!
表格合并完毕!
4、自行扩展建议
- 可以设置单元格的格式,字体,背景等。详见xlwt的使用.
- 可以添加代码去掉每页的表头或者个最终表添加表头(否则需要在合并后手动删除表头)
- 可以与其他更高效的excel处理模块结合
- 可以添加一些错误处理
- 可以使用Pyinstaller进行打包,可以分享使用,在这之前需要对文件进行一定的处理,将路径,文件名都改为外界输入
#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
@FileName :CombineExcel.py
@desc :将多个excel文件合并并输出为一个excel文件
@Author :Young
@IDE :PyCharm
@Time :2021/2/20 0020 8:08
'''
#传入读取文件的基本路径,传入最终写入的文件名
import xlrd
import xlwt
import os
class CombinMutipleExcelFiles:
def __init__(self, basePath = '',fileList=[],finalFileName=''):
'''
:param basePath: 所读取的文件所在的文件夹路径,相对路径和绝对路径均可
:param fileList: 读取的文件名的列表
:param finalFileName: 最终的合并文件名
注:默认合并的文件在原来的文件夹下面
'''
self.basePath = basePath
self.fileList = fileList
self.finalFileName = finalFileName
self.rows = 0
#循环读取excel文件,循环写入excel文件
def readAndCombin(self):
resultFile = os.path.join(self.basePath,self.finalFileName) #拼接最终的文件路径
#新建一个xls对象
workbook = xlwt.Workbook(encoding="utf-8")
#新建一个工作表
worksheet = workbook.add_sheet('sheet1',cell_overwrite_ok=True)
for fileName in self.fileList:
filePath = os.path.join(self.basePath,fileName) #拼接文件完整的路径
#读取Excel
excel = xlrd.open_workbook(filePath)
#获取所有的sheet表名称
sheet_names = excel.sheet_names() #返回的是一个列表
#获取第一个工作表
sheet1 = excel.sheet_by_name(sheet_name=sheet_names[0])
#获取第一个工作表有多少行,多少列
rows = sheet1.nrows
cols = sheet1.ncols
#读取每个单元格的数据然后写入新表
for row in range(rows):
for col in range(cols):
value = sheet1.cell_value(rowx=row,colx=col) #获取原始单元格值
worksheet.write(row+self.rows,col,value) #将单元格的值写入新表
#双循环结束,读取了一个表的内容
self.rows = self.rows + rows #追加写
print(fileName+'读取完毕!')
#保存最终表格
workbook.save(resultFile)
print('表格合并完毕!')
if __name__ == '__main__':
print('欢迎使用xls文件合并脚本程序!\n')
print('请按以下要求操作\n注意此脚本只能合并xls文件,如果需要合并xlsx文件请修改文件扩展名!!!\n')
basePath = input('请输入文件夹的绝对路径或者相对路径(建议使用绝对路径):')
fileList = []
print("请输入需要合并的多个xls文件名名称,按'N'键结束\n")
while True:
fileName = input('请输入文件名称:')
if fileName == 'N' or fileName == 'n':
print('文件名称输入完毕!')
break
else:
fileList.append(fileName)
finalFileName = input('请输入最终汇总的文件名:')
print('开始合并......')
newFile = CombinMutipleExcelFiles(basePath=basePath, fileList=fileList, finalFileName=finalFileName)
newFile.readAndCombin()
print('谢谢使用!')
打包处理 pyinstaller -F CombineExcel.py
生成可执行文件!