办公脚本集
已有一列合并单元格,如何对其他列进行同样的操作?
本站点使用 MrDoc 构建
-
+
已有一列合并单元格,如何对其他列进行同样的操作?
## 生成分组序列号 例如,G4:G2000 数据,有部分行被人工判断合并单元格了,我们首先要让相同的合并单元格拥有同一个分组号。 判断原理是,合并单元格只有首行有值。 新起 M 列。让M4=1, 让M5公式为`=IF(G5="", MAX($M$4:M4), MAX($M$4:M4) + 1)`, M列其他行顺序填充即可。 ## 按分组序列号,处理单元格内容合并。 比如需要对N列进行合并,在其右边新起一列,对应公式为 ``` =LET(g, M4, arr,FILTER($N$4:$N$2000,$M$4:$M$2000=g), unq,UNIQUE(arr), TEXTJOIN(CHAR(10),TRUE,unq) ) ``` 简单解释一下。变量g = M4、变量arr = N4:N2000中,筛选对应M列为g的数据,变量unq = 对arr 数据去重。 然后用 换行符char(10)进行文本拼接得到内容。 ## 单元格内容合并后,处理格式的合并 可以发现单元格形式没有合并。这是数据公式无法做到的,所以我们需要执行Python脚本。以下脚本供参考:按M列合并G列。 ```安装依赖 # 自行安装python环境。直到如下命令可用 pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple ``` ```创建handle.py from openpyxl import load_workbook from openpyxl.worksheet.cell_range import CellRange from openpyxl.styles import Alignment def merge_c_by_m_group(file_path, col): wb = load_workbook(file_path) ws = wb.active start_row = 4 end_row = 2000 # 分组数据号 group_col = "M" target_col = col operate_range = f"{target_col}{start_row}:{target_col}{end_row}" target_cr = CellRange(operate_range) # 清除C4:C2000内所有原有合并 all_merged = list(ws.merged_cells.ranges) for mcr in all_merged: cr = CellRange(mcr.coord) if not cr.isdisjoint(target_cr): ws.unmerge_cells(mcr.coord) group_start = start_row # 遍历M4-M2000,分组对比统一转字符串消除类型差异 for r in range(start_row + 1, end_row + 1): # 取值,空值转为空字符串 val_current = str(ws[f"{group_col}{r}"].value).strip() if ws[f"{group_col}{r}"].value is not None else "" val_start = str(ws[f"{group_col}{group_start}"].value).strip() if ws[f"{group_col}{group_start}"].value is not None else "" # 分组不一致,执行合并 if val_current != val_start: merge_area = f"{col}{group_start}:{col}{r - 1}" ws.merge_cells(merge_area) # print(f"已合并:{merge_area} 分组值:{val_start}") group_start = r # 处理最后一组 final_merge = f"{col}{group_start}:{col}{end_row}" ws.merge_cells(final_merge) print(f"已合并最后一段:{final_merge} 分组值:{str(ws[f'M{group_start}'].value)}") # 设置样式 align_cfg = Alignment(wrap_text=True, vertical="top") for r in range(start_row, end_row + 1): ws[f"{col}{r}"].alignment = align_cfg wb.save(file_path) wb.close() print("\n全部处理完成!") if __name__ == "__main__": excel_file = r"你的EXCEL路径名" col = "K" #你要合并的数据列 merge_c_by_m_group(excel_file, col) ``` ``` bash 执行脚本 python.exe handle.py ```
寒烟濡雨
2026年7月1日 08:33
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码