不喜欢说话,直接上代码。需求是有多个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