Python实现Excel合并单元格的方法可分为以下两类:基础合并操作和批量处理。以下是具体实现方案:
一、基础合并操作(单文件处理)
-
使用
openpyxl
库适用于单个Excel文件,通过遍历行和列判断是否需要合并单元格。示例代码如下:
from openpyxl import Workbook, load_workbook def merge_excel(file_path, merge_columns): wb = load_workbook(file_path) ws = wb.active merged_ranges = [] for row in ws.iter_rows(min_row=1, max_col=ws.max_column, max_row=ws.max_row): row_data = [cell.value for cell in row] if len(set(row_data)) > 1: for i in range(1, len(row_data)): if row_data[i] == row_data[i-1] and i in merge_columns: merged_ranges.append((row.row, row.column, row[i].row, row[i].column)) for start_row, start_col, end_row, end_col in merged_ranges: ws.merge_cells(start_row=start_row, start_col=start_col, end_row=end_row, end_col=end_col) wb.save(file_path)
说明:该函数会读取指定文件,根据
merge_columns
参数中的列索引合并连续相同值的单元格。 -
使用
pandas
与openpyxl
结合先用
pandas
读取数据,再通过openpyxl
写入时合并单元格。示例代码:import pandas as pd from openpyxl import Workbook def merge_excel_pandas(file_path, merge_columns): df = pd.read_excel(file_path) wb = Workbook() ws = wb.active ws.append(df.values) for start_row, start_col, end_row, end_col in merge_columns: ws.merge_cells(start_row=start_row, start_col=start_col, end_row=end_row, end_col=end_col) wb.save(file_path)
说明:适用于需要先处理数据(如分组、清洗)再合并的场景。
二、批量处理(多文件合并)
-
使用
pandas
的concat
函数适用于将多个Excel文件合并为一个新文件,无需手动合并单元格。示例代码:
import pandas as pd import os def batch_merge_excel(folder_path, output_file): all_data = [] for file in os.listdir(folder_path): if file.endswith(".xlsx"): df = pd.read_excel(os.path.join(folder_path, file)) all_data.append(df) result = pd.concat(all_data, ignore_index=True) result.to_excel(output_file, index=False)
说明:该函数会自动合并同一列中连续相同值的单元格,适用于数据清洗后的最终输出。
-
结合
openpyxl
进行复杂合并逻辑若需在合并时添加辅助列或自定义规则,可结合
openpyxl
实现。例如:import pandas as pd from openpyxl import Workbook def batch_merge_with_rules(folder_path, output_file, merge_columns): all_data = [] for file in os.listdir(folder_path): if file.endswith(".xlsx"): df = pd.read_excel(os.path.join(folder_path, file))