m0_64688321 2021-12-01 16:48 采纳率: 100%
浏览 91
已结题

Python操作excel表格合并

多个excel表格,每个表格包含多个sheet表,把相同sheet表内的内容合并到同一个sheet表内比如excel表1有a.b.c三个sheet表,表2有a.b.d.三个sheet表格,然后合成出来的excel表格为a.b.c.d四个sheet表格,其中新表的a包含表1的a和表2的a

  • 写回答

1条回答 默认 最新

  • 鸡蛋酱$ 2021-12-01 21:17
    关注
    
    import os
    import xlrd
    import openpyxl
    
    
    def get_excle():
        dir_list = os.listdir()
        if 'excel' not in dir_list:
            os.mkdir('excel')
        os.chdir('excel')
        Excels = os.listdir()
        return Excels
    
    
    # 获取单张表的数据
    def get_data(filename):
        d_dict = {}
        file = xlrd.open_workbook(filename)
        sheet_names = file.sheet_names()
        for i in range(len(sheet_names)):
            sheet_list = []
            sheet = file.sheet_by_name(sheet_names[i])
            d_dict[sheet_names[i]] = d_dict.get(sheet_names[i], [])
            nrows = sheet.nrows
            ncols = sheet.ncols
            for row in range(nrows):
                new_list = []
                for col in range(ncols):
                    new_list.append(sheet.cell(row, col).value)
                sheet_list.append(new_list)
            d_dict[sheet_names[i]] += sheet_list
        return d_dict
    
    
    # 获取文件夹下所有Excel的数据
    def sum_data():
        sum_dict = {}
        os.chdir('excel')
        excels = get_excle()
        for i in range(len(excels)):
            if '.xls' not in excels[i] or '.xlsx' not in excels[i]:
                continue
            data_dict = get_data(excels[i])
            sum_dict = create_dict_sheet(sum_dict, data_dict)
        os.chdir('..')
        return sum_dict
    
    
    # 整合数据
    def create_dict_sheet(dict0, dict1):
        new_dict = {}
        name0 = list(dict0.keys())
        name1 = list(dict1.keys())
        names = []
        for i in range(len(name0)):
            if name0[i] not in names:
                names.append(name0[i])
        for i in range(len(name1)):
            if name1[i] not in names:
                names.append(name1[i])
        for i in range(len(names)):
            new_dict[names[i]] = new_dict.get(names[i], [])
        for i in range(len(dict0.keys())):
            new_dict[list(dict0.keys())[i]] += dict0[list(dict0.keys())[i]]
        for i in range(len(dict1.keys())):
            new_dict[list(dict1.keys())[i]] += dict1[list(dict1.keys())[i]]
        return new_dict
    
    
    # 将数据写入新表格
    def create_excel(data):
        dir_list = os.listdir()
        if "result" not in dir_list:
            os.mkdir('result')
        os.chdir('result')
        sheets = list(data.keys())
        file = openpyxl.Workbook()
        if 'Sheet' not in sheets:
            wb = file['Sheet']
            file.remove(wb)
            for i in range(len(sheets)):
                file.create_sheet(f'{sheets[i]}')
            sheet_name = file.sheetnames
            for i in range(len(sheet_name)):
                sheet = file[sheet_name[i]]
                for j in range(len(data[sheet_name[i]])):
                    for k in range(len(data[sheet_name[i]][j])):
                        sheet.cell(row=j + 1, column=k + 1, value=data[sheet_name[i]][j][k])
        else:
            for i in range(len(sheets)):
                file.create_sheet(f'{sheets[i]}')
            sheet_name = file.sheetnames
            for i in range(len(sheet_name)):
                sheet = file[sheet_name[i]]
                for j in range(len(data[sheet_name[i]])):
                    for k in range(len(data[sheet_name[i]][j])):
                        sheet.cell(row=j + 1, column=k + 1, value=data[sheet_name[i]][j][k])
        file.save('new.xlsx')
        os.chdir('..')
    
    
    if __name__ == '__main__':
        os.chdir('..')
        data_list = sum_data()
        create_excel(data_list)
    

    有用的话点一下采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月9日
  • 已采纳回答 12月1日
  • 创建了问题 12月1日

悬赏问题

  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题