代码的主要功能是合并两个Excel文档:
第一个文档如下:
第二个文档如下:
想要合并成下面图片的样子:
下面代码实现:
"""
Date:2024/10/21 15:46
File : MergeExcel.py
"""
from copy import copy
from openpyxl import load_workbook
class MergeExcel:
def __init__(self):
e1 = "fileDirectory/excel1.xlsx"
e2 = "fileDirectory/excel2.xlsx"
self.wb1 = load_workbook(e1)
self.wb2 = load_workbook(e2)
self.sheet1 = self.wb1.active
self.sheet2 = self.wb2.active
@staticmethod
def copy_style(source_cell, target_cell):
if source_cell.has_style:
target_cell.font = copy(source_cell.font)
target_cell.fill = copy(source_cell.fill)
target_cell.border = copy(source_cell.border)
target_cell.alignment = copy(source_cell.alignment)
target_cell.number_format = source_cell.number_format
target_cell.protection = copy(source_cell.protection)
def apply_merge_cell(self, merged_ranges):
for min_row, min_col, max_row, max_col in merged_ranges:
self.sheet2.merge_cells(start_row=min_row, start_column=min_col,
end_row=max_row, end_column=max_col)
def copy_value_style(self, source_start_row, source_end_row, source_start_col, source_end_col, target_start_row,
target_start_col):
for row in range(source_start_row, source_end_row + 1):
for col in range(source_start_col, source_end_col + 1):
source_cell = self.sheet1.cell(row=row, column=col)
target_cell = self.sheet2.cell(row=row + target_start_row - source_start_row,
column=col + target_start_col - source_start_col)
self.sheet2.cell(row=row + target_start_row - source_start_row,
column=col + target_start_col - source_start_col).value = source_cell.value
self.copy_style(source_cell, target_cell)
def copy_stats(self, source_start_row, source_end_row, source_start_col, source_end_col, target_start_row,
target_start_col):
merged_ranges = []
for merge_range in self.sheet1.merged_cells.ranges:
min_col, min_row, max_col, max_row = merge_range.bounds
if (min_row >= source_start_row and max_row <= source_end_row and
min_col >= source_start_col and max_col <= source_end_col):
merged_ranges.append((min_row + target_start_row - source_start_row,
min_col + target_start_col - source_start_col,
max_row + target_start_row - source_start_row,
max_col + target_start_col - source_start_col))
self.apply_merge_cell(merged_ranges)
def main(self):
self.copy_value_style(1, self.sheet1.max_row, 1, self.sheet1.max_column, self.sheet1.max_row + 2, 1)
self.copy_stats(1, self.sheet1.max_row, 1, self.sheet1.max_column, self.sheet1.max_row + 2, 1)
self.wb2.save('fileDirectory/MergeExcel.xlsx')
print("Done...")
if __name__ == '__main__':
merge_excel = MergeExcel()
merge_excel.main()
简单的代码,希望能帮助到像我一样的小白,大佬勿喷。
如果有不妥之处希望您不吝赐教。