python实现多EXCEL表格合并xls、xlsx格式

在这里插入图片描述

前言

以下都是我学习CSDN里面的各位大神的分享:
我主要参考目标-主体和弹窗
次要参考-进度显示

代码的特点

1、可以弹窗选择需要合并的文件所在文件夹;
2、可以设置excel的子项页签数量;
3、可以合并xls、xlsx格式;
注意:xlrd 版本要选择1.2的,不要用最新的,最新的不支持XLSX

完整代码

# 1 引入库
import tkinter as tk           #选择文件夹功能用到的库
from tkinter import filedialog #弹出文件框,选择需要合并的文件所在的文件夹
import os                      #扫描文件夹中的文件用到的库
import xlrd                    #读取Excel文件的包
import xlsxwriter              #将文件写入Excel的包

# 3.1 打开文件
#打开excel
def OpenExcelxlsx(Filepath):
    try:
        file=xlrd.open_workbook(Filepath)
        return file
    except Exception as e:
        print(e)


# 3.2 获取excel文件信息
# 获取Excel中所有的sheet
def GetAllSheets(file):
    return file.sheets()

# 获取某个sheet表的行数
def GetAllRows(table):
    return table.nrows


# 3.3 读取所有文件的所有数据
#读取文件内容
def GetContent(excel,sheetNo):
    content=list()                  #声明一个变量,用于存数据
    try:
        sheets=GetAllSheets(excel)  #对每个excel文件,获知它sheet的数量
        table=sheets[sheetNo]       #对某个sheet进行操作

    except Exception as e:          #异常处理
        print(e)                    #打印异常信息
    rows=GetAllRows(table)          #某个sheet表格的行数
    for i in range(rows):           #对每一行数据进行如下操作
        data=table.row_values(i)    #提取该行的数据
        content.append(data)        #将提取的数据存在list列表中
    return content                  #操作完成后,将提取的数据进行返回

# 3.4 将读取的文件写入到新文件中
# 所有的Excel的所有sheets变成一个sheet
def Sum1(fileName, data):
    finalFile = xlsxwriter.Workbook(fileName)  # 创建一个工作表文件
    sheet = finalFile.add_worksheet()          # 为该工作表添加一个sheet
    count = 0                                  # 由于每个sheet的数据数目不一样,因此需要计数

    for sheetId in range(len(data)):
        for row in range(len(data[sheetId])):
            for col in range(len(data[sheetId][row])):
                d = data[sheetId][row][col]                 # 提取数据
                sheet.write(count, col, d)                  # 将数据存入新文件中 <行,列,数据>
            count = count + 1                               # 汇总文件中的行数+1
    finalFile.close()                                       # 文件要进行关闭

if __name__ == '__main__':
    '''打开选择文件夹对话框'''

# 2 选择待合并文件所在的文件夹
root = tk.Tk()                         #初始化弹出文件库所需要的库
root.withdraw()                        #不加这个选择框消失不了
folderPath = filedialog.askdirectory() #获得选择好的文件夹


# 3 读取所在文件夹中的xls文件,并进行合并
data = list()                     # 声明一个list变量,用来存数据,也可以用data=[]来初始化
fileSet = os.listdir(folderPath)  # 扫描所选文件夹中所有文件
for file in fileSet:
    if file.endswith('.xlsx'):    # 选择xls文件进行后续操作
        try:
            excel = OpenExcelxlsx(folderPath + '/' + file)  # 打开excel文件
        except Exception as e:
            print(e)                           # 异常处理,避免程序无脑崩溃:如果打开失败就打印失败信息
        sheets = GetAllSheets(excel)           # 获取excel文件中所有sheet
        for i in range(1):                     # 对第一个sheet进行数据提取
        # for i in range(len(sheets)):         # 对每个sheet进行数据提取,所有子表
            print("正在读取文件:" + str(file) + "的第" + str(i) + "个sheet表的内容...")
            data.append(GetContent(excel, i))  # 使用append方法将所有数据存起来

fileName = str('/bom表.xlsx')                   # 合并后的文件
finalFilePath = folderPath + fileName          # 给文件名加上文件目录,这样汇总文件就出现在当前目录了
Sum1(finalFilePath, data)                      # 将data中收集的数据存入到新建的文件夹中

print("excel合并完成")

感言

这是我第一次在CSDN上面发表,感谢所有参与分享技术的大佬;
后面我会继续学习,因为现在还没完全满足我的使用需求,还需要手动操作表格,
如果有大佬可以分享一下就太好了,以下是我的疑问:
1、判断表头重复
2、判断列重复
3、除了表头重复,不同表格的指定列还存在重复即不考虑此表,并提示表格名称。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值