背景
工作中经常会遇到有格式一模一样的excel文档合并成一个单独的,一般我们的都是手动复制,excel少的话手动操作下就行,如果很多,就是麻烦,今天就来说下在python中如何解决这个问题
在python中使用openpyxl模块合并多个excel文件
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)