python使用openpyxl模块合并多个excel文件

不喜欢说话,直接上代码。需求是有多个excel文件,里面每张表的字段是一致的,但是表的顺序可能会变化。需要把多个excel合并成一个。
使用python2,openpyxl模块,只能合并xlsx格式的文件。

# -*- coding: utf-8 -*-
"""
File Name:     insert_img
Description :
Author :       meng_zhihao
mail :       312141830@qq.com
date:          2019/5/14
"""
# xlsxwriter不能操作现有的excel! xlwt、wlrd只能读写xls文件,而不能操作xlsx文件 所以只能用openpyxl,只能操作xlsx,但是更方便!
# execel 合并器!根据字段合并,且允许sheet不同

# 不支持xls!! 后面考虑转换 自动转换可能会有问题的

import os
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def find_excel_list():
    excel_list = []
    try:
        dir_path = 'input'
        files = os.listdir(dir_path )
        for file in files:
            if '.xlsx' in file:
                excel_list.append(dir_path+'/'+file)
    except Exception,e:
        pass
    return excel_list

def gen_xls(excel_list):
    from openpyxl import Workbook, load_workbook
    from openpyxl.drawing.image import Image

    if len(excel_list)<2:
        return
    data_dict = {}
    for excel_file in excel_list:
        new_wb = load_workbook(excel_file)
        sheet_names = new_wb.get_sheet_names()
        for sheet_name in sheet_names:
            data_sheet = new_wb.get_sheet_by_name(sheet_name)
            for row in data_sheet.iter_rows():
                row_num = row[0].row
                if row_num == 1: # 字段标记
                    print row[0].value
                    sheet_name = row[0].value # 用第一个字段命名,后面可以映射回去
                    if not sheet_name in data_dict:
                        data_dict[sheet_name]=[]
                        data_dict[sheet_name].append(row)
                else:
                    data_dict[sheet_name].append(row)

    wb = Workbook()
    for  sheet_name in data_dict:
        # sheet = wb.get_sheet_by_name(u"汇总销量")
        sheet = wb.create_sheet(sheet_name)
        for row in  data_dict[sheet_name]:
            sheet.append([cell.value for cell in row])
        wb.save('result.xlsx') # 貌似可以保存多次的





if __name__ == '__main__':
    excel_list = find_excel_list()
    gen_xls(excel_list)

    # gen_xls()
    # find_img('2B18BS18')
    pass
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值