瑞客论坛

 找回密码
 立即注册
查看: 201|回复: 5

python合并两个Excel文件的脚本

[复制链接]

金币3155  第536名

2

主题

877

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

威望
3692
贡献
4026
热心值
1
金币
3155
注册时间
2021-11-5
发表于 2024-10-21 23:27 | 显示全部楼层 |阅读模式
合并两个Excel文档:
第一个文档如下:
第二个文档如下:
想要合并成下面图片的样子:
学习一段时间了,写了个python合并两个Excel文件的脚本,希望能帮助到像我一样的小白,代码简单,大佬勿喷。不足之处请您不吝赐教:
下面代码实现:

  1. """
  2. Date:2024/10/21 15:46
  3. File : MergeExcel.py
  4. """
  5. from copy import copy
  6. from openpyxl import load_workbook


  7. class MergeExcel:
  8.     def __init__(self):
  9.         e1 = "fileDirectory/excel1.xlsx"
  10.         e2 = "fileDirectory/excel2.xlsx"
  11.         self.wb1 = load_workbook(e1)
  12.         self.wb2 = load_workbook(e2)
  13.         self.sheet1 = self.wb1.active
  14.         self.sheet2 = self.wb2.active
  15.         self.insert_row = 99             # 这里设置从哪行插入第一张表的数据 或者 self.sheet2.max_row + 1

  16.     @staticmethod
  17.     def copy_style(source_cell, target_cell):
  18.         if source_cell.has_style:
  19.             target_cell.font = copy(source_cell.font)
  20.             target_cell.fill = copy(source_cell.fill)
  21.             target_cell.border = copy(source_cell.border)
  22.             target_cell.alignment = copy(source_cell.alignment)
  23.             target_cell.number_format = source_cell.number_format
  24.             target_cell.protection = copy(source_cell.protection)
  25.             # 使用openpyxl库的cell.comment属性获取单元格的注释。
  26.             if source_cell.comment:
  27.                 target_cell.comment = source_cell.comment  # 有批注的复制批注

  28.     def apply_merge_cell(self, merged_ranges):
  29.         for min_row, min_col, max_row, max_col in merged_ranges:
  30.             self.sheet2.merge_cells(start_row=min_row, start_column=min_col,
  31.                                     end_row=max_row, end_column=max_col)

  32.     def copy_value_style(self, source_start_row, source_end_row, source_start_col, source_end_col, target_start_row,
  33.                          target_start_col):
  34.         for row in range(source_start_row, source_end_row + 1):
  35.             for col in range(source_start_col, source_end_col + 1):
  36.                 source_cell = self.sheet1.cell(row=row, column=col)
  37.                 target_cell = self.sheet2.cell(row=row + target_start_row - source_start_row,
  38.                                                column=col + target_start_col - source_start_col)
  39.                 self.sheet2.cell(row=row + target_start_row - source_start_row,
  40.                                  column=col + target_start_col - source_start_col).value = source_cell.value

  41.                 self.copy_style(source_cell, target_cell)

  42.     def copy_stats(self, source_start_row, source_end_row, source_start_col, source_end_col, target_start_row,
  43.                    target_start_col):
  44.         merged_ranges = []
  45.         for merge_range in self.sheet1.merged_cells.ranges:
  46.             min_col, min_row, max_col, max_row = merge_range.bounds
  47.             print(min_row, min_col, max_row, max_col)
  48.             print(source_start_row, source_start_col,source_end_row, source_end_col)
  49.             if (min_row >= source_start_row and max_row <= source_end_row and
  50.                     min_col >= source_start_col and max_col <= source_end_col):
  51.                 merged_ranges.append((min_row + target_start_row - source_end_row - 1,
  52.                                       min_col + target_start_col - source_start_col,
  53.                                       max_row + target_start_row - source_end_row - 1,
  54.                                       max_col + target_start_col - source_start_col))
  55.                 self.apply_merge_cell(merged_ranges)
  56.         print(merged_ranges)

  57.     def main(self):
  58.         self.copy_value_style(1, self.sheet1.max_row, 1, self.sheet1.max_column, self.insert_row, 1)
  59.         self.copy_stats(1, self.sheet1.max_row, 1, self.sheet1.max_column, self.sheet2.max_row + 1, 1)

  60.         # 保存工作簿
  61.         self.wb2.save('fileDirectory/MergeExcel.xlsx')
  62.         print("Done...")


  63. if __name__ == '__main__':
  64.     merge_excel = MergeExcel()
  65.     merge_excel.main()
复制代码

评分

参与人数 1金币 +1 热心值 +1 收起 理由
17171818 + 1 + 1 用心讨论,共获提升!

查看全部评分

回复

使用道具 举报

金币2668  第670名

16

主题

2827

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

威望
7099
贡献
3994
热心值
2
金币
2668
注册时间
2022-7-9

灌水之王活跃会员一年荣誉奖章最佳新人

发表于 2024-10-23 07:16 | 显示全部楼层
这个代码量、、、、、、、、、、、、、、
回复

使用道具 举报

金币2543  第704名

0

主题

3270

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

威望
6069
贡献
3883
热心值
0
金币
2543
注册时间
2021-11-20
发表于 2024-10-23 08:17 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

金币1061  第1672名

0

主题

2890

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

威望
5802
贡献
3723
热心值
0
金币
1061
注册时间
2022-2-21
发表于 2024-10-23 09:55 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

金币41  第11716名

0

主题

102

回帖

194

积分

注册会员

Rank: 2

威望
112
贡献
41
热心值
0
金币
41
注册时间
2022-2-6
发表于 2024-10-23 12:19 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

金币97  第9529名

1

主题

21

回帖

2206

积分

永久会员

Rank: 8Rank: 8

威望
1146
贡献
963
热心值
0
金币
97
注册时间
2023-3-29
发表于 2024-11-1 14:09 | 显示全部楼层
本帖最后由 glh 于 2024-11-1 14:14 编辑
laoda1229 发表于 2024-10-23 07:16
这个代码量、、、、、、、、、、、、、、
  1. import pandas as pd

  2. # 读取第一个 Excel 文件
  3. df1 = pd.read_excel('file1.xlsx')

  4. # 读取第二个 Excel 文件
  5. df2 = pd.read_excel('file2.xlsx')

  6. # 拼接两个 DataFrame
  7. combined_df = pd.concat([df1, df2], ignore_index=True)

  8. # 保存为新的 Excel 文件
  9. combined_df.to_excel('combined_file.xlsx', index=False)

  10. print("两个 Excel 文件已成功拼接并保存为 combined_file.xlsx")
复制代码
chatgpt回答的,够简洁吧。看着没什么问题。格式可能乱掉了,可以根句具体情况一直问。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|瑞客论坛 |网站地图

GMT+8, 2025-2-6 07:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表