使用自定义类对多个excel表格进行合并输出(xlwt、xlrt、os)

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
生成可执行文件!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值