简述
最近接到一个需求,需要为公司里的一个部门提供一个文件上传自动化合并的系统,以供用户稽核,谈到自动化,肯定是选择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()