专栏名称: 完美Excel
Excel与VBA技术学习与实践
目录
相关文章推荐
Excel之家ExcelHome  ·  WPS表格中的几个实用功能 ·  2 天前  
Excel之家ExcelHome  ·  让Excel自动检测录入的数据 ·  昨天  
Excel之家ExcelHome  ·  还在手动筛选数据?FILTER函数这几种典型 ... ·  昨天  
完美Excel  ·  使用deepseek自动合并“复杂的”Exc ... ·  5 天前  
完美Excel  ·  deepseep+Python实现自动合并E ... ·  3 天前  
51好读  ›  专栏  ›  完美Excel

deepseep+Python实现自动合并Excel工作簿

完美Excel  · 公众号  · Excel  · 2025-02-17 05:59

正文

学习Excel技术,关注微信公众号:
excelperfect

标签: AI 大模型 deepseek Python

使用 deepseep 自动合并“复杂的” Excel 工作簿 中,我们给 deepseek 提出了需求,并使用它给出的 VBA 代码实现了工作簿的合并。

本文要使用 Python 实现同样的目的,其示例数据参见 (单击即可进入相应文章)

使用 deepseep 自动合并“复杂的” Excel 工作簿

deepseek 的提问与之前相同,只是改用 Python 实现。提问如下:

我需要汇总多个工作簿。具体情况如下:

1. 这些工作簿都位于同一文件夹中。

2. 这些工作簿只包含一个工作表。

3. 工作表模版如附件工作簿 InfoTable.xlsx 中的 委托单 工作表,数据区域为单元格区域 B7:I16

4. 新建一个工作簿中用于汇总数据,其标题行为模版 委托单 工作表 B7:I16 中空单元格左侧单元格内容,其数据为委托单 工作表 B7:I16 中空单元格输入的内容。

5. 附件有两个示例数据工作簿 InfoTable1.xlsx InfoTable2.xlsx

请帮我编写 Python 代码。

同时,上传了示例工作簿作为附件,如下图 1 所示。

1
deepseek 给出的 Python 代码如下:

from openpyxl import Workbook, load_workbookfrom openpyxl.utils import get_column_letterimport osimport datetime
# 配置参数template_file = f'D:\完美Excel\collectData\InfoTable.xlsx'  # 模板文件名folder_path = f'D:\完美Excel\collectData'                # Excel文件所在文件夹output_file = f'D:\完美Excel\collectData\汇总结果.xlsx'     # 输出文件名
# 从模板中提取标题和对应坐标def extract_template_info(template_path): wb = load_workbook(template_path, data_only=True) ws = wb.active # 获取第一个工作表 titles = [] positions = []
# 数据区域 B7:H16 (行7-16,列2-8) for row in range(7, 17): for col in range(2, 9): cell = ws.cell(row=row, column=col) # 检查单元格是否为空     if cell.value in (None, """ "):       left_cell = ws.cell(row=row, column=col-1) if left_cell.value:        title = str(left_cell.value).replace('\n''').strip() titles.append(title)        positions.append((row, col)) wb.close() return titles, positions
# 处理所有数据文件def process_files(folder, template_positions): all_data = [] files = [f for f in os.listdir(folder) if f.endswith('.xlsx') and f != template_file]
for file in files: file_path = os.path.join(folder, file)   wb = load_workbook(file_path, data_only=True) ws = wb.active # 获取第一个工作表 row_data = []
for (r, c) in template_positions: cell = ws.cell(row=r, column=c) value = cell.value
# 处理日期类型     if isinstance(value, datetime.datetime):       value = value.strftime('%Y-%m-%d %H:%M:%S')     row_data.append(value if value is not None else "")
   all_data.append(row_data) wb.close() return all_data
# 主程序if __name__ == "__main__": # 提取模板信息 titles, positions = extract_template_info(template_file)
# 处理数据文件 data = process_files(folder_path, positions)
# 创建汇总文件 wb_out = Workbook() # 创建新的工作簿 ws_out = wb_out.active
# 添加标题行 ws_out.append(titles)
# 添加数据行 for row in






请到「今天看啥」查看全文