如何用Python遍历工作表行并按每2行合并单列单元格?
使用xlwings实现Excel列中每两行单元格合并
xlwings完全支持你要的批量合并单元格需求,结合循环就能轻松实现每两行合并的效果。以下是具体实现方案:
核心思路
- 连接目标Excel文件及工作表,确保对应DataFrame已写入(或已存在于工作表中)
- 确定要处理的目标列,计算数据总行数
- 以步长为2的循环遍历行,每次合并当前行与下一行的目标列单元格
- 处理奇数行数的边界情况,避免越界错误
- 可选:设置合并后单元格的对齐样式,优化显示效果
代码示例
import xlwings as xw import pandas as pd # 示例DataFrame(替换为你的实际数据) df = pd.DataFrame({'分类': ['甲', '甲', '乙', '乙', '丙'], '数值': [15, 25, 35, 45, 55]}) # 连接Excel文件(已存在文件填路径,新建用xw.Book()) wb = xw.Book('目标文件.xlsx') sheet = wb.sheets['Sheet1'] # 将DataFrame写入工作表(若数据已在表中可跳过此步) sheet.range('A1').value = df # 配置目标列与数据范围 target_col = 'A' # 对应DataFrame的第一列 header_row = 1 # 表头行号 start_row = header_row + 1 # 数据起始行 total_data_rows = len(df) # 数据总行数 total_rows = header_row + total_data_rows # 工作表总行数(含表头) # 循环合并每两行 for i in range(start_row, total_rows + 1, 2): # 检查下一行是否存在,避免奇数行数时越界 if i + 1 <= total_rows: sheet.range(f'{target_col}{i}:{target_col}{i+1}').merge() # 设置合并单元格的居中对齐(可选) merged_range = sheet.range(f'{target_col}{start_row}:{target_col}{total_rows}') merged_range.api.HorizontalAlignment = xw.constants.HAlign.xlHAlignCenter merged_range.api.VerticalAlignment = xw.constants.VAlign.xlVAlignCenter # 保存并关闭文件 wb.save() wb.close()
关键说明
- 循环步长设为
2,确保每次迭代处理连续两行 - 加入
i + 1 <= total_rows的判断,避免最后一行是奇数时出现索引错误 - 若你的DataFrame已提前写入工作表,直接跳过
sheet.range('A1').value = df这一步即可 - 对齐样式可根据需求调整,也可省略
内容的提问来源于stack exchange,提问作者everymanandhislizard
相关产品推荐
相关产品推荐

