最近接到一个需求,需要为公司里的一个部门提供一个文件上传自动化合并的系统,以供用户稽核,谈到自动化,肯定是选择python,毕竟python的轮子多。比较了市面上几个用得多的python库,我最终选择了xlwings。但不妨我们来比较另外的库,openpyxl。pandas当然很棒,但pandas是数据分析的专家,用在这里不太合适。
正文 环境python3.10.13和office16。吐糟一下,openpyxl和xlwings都需要调用微软的execl接口,wps不支持,麻烦。
openpyxl我开始是首先想尝试用openpyxl,但发现openpyxl无法复制图像,所以我放弃了,但代码顺便贴上来,有需要自取。
from openpyxl import load_workbook # 定义要合并的Excel文件列表和对应的工作表名称 excel_files = { 'file1.xlsx': 'Sheet1', 'file2.xlsx': 'Sheet2', 'file3.xlsx': 'Sheet3' } # 创建一个新的Excel文件 merged_book = None # 循环遍历每个Excel文件 for file, sheet_name in excel_files.items(): # 打开要复制的Excel文件 book = load_workbook(file) # 复制每个工作表到新的Excel文件的对应工作表 for source_sheet in book.sheetnames: source_sheet = book[source_sheet] if merged_book is None: # 如果是第一个文件,直接复制工作表到新的Excel文件 merged_book = load_workbook(file) target_sheet = merged_book[sheet_name] else: # 如果不是第一个文件,创建新的工作表,并复制工作表的内容到新的工作表 target_sheet = merged_book.create_sheet(title=sheet_name) for row in source_sheet.iter_rows(values_only=True): target_sheet.append(row) # 保存合并后的Excel文件 merged_book.save('merged_file.xlsx') xlwings不废话贴代码
import xlwings as xw # 打开源Excel文件 source_file ="file1.xlsx"wb_source = xw.Book(source_file) # 创建目标Excel文件 target_file ="file2.xlsx"wb_target = xw.Book(target_file) # 获取源和目标的工作表 source_sheet = wb_source.sheets[0] target_sheet = wb_target.sheets[0] # 复制源Excel文件中的数据和图片到目标Excel文件 source_sheet.api.Copy(Before=target_sheet.api) # 保存目标Excel文件 wb_target.save() #wb_target.close() # 关闭源Excel文件 #wb_source.close() #杀死execl进程,否则execl一直打开 wb_source.app.kill()