Python告别手动操作!一键搞定批量Excel单元格的合并与拆分

我是智能取经人 2024-07-04 11:49:13

在日常办公中,我们经常会遇到需要对Excel表格进行单元格合并和拆分的情况。从汇总统计的角度,合并单元格非常不友好。单元格一旦合并,使用数据透视表,分类汇总都无法得到正确的结果。所以,对于原始数据,数据分析师都严格要求不允许合并单元格。但在日常的工作中,部分Excel打印或者老板要看数据时,要求将某列上下内容相同的单元格合并,以便看起来清爽。手动操作不仅费时费力,还容易出错。我们将介绍如何使用Python自动化完成这些任务,让你告别手动操作的烦恼!

Excel单元格合并与拆分的烦恼

我的朋友,作为总部的中层领导,经常需要处理来自各分公司的Excel明细表。每次收到这些表格,他都需要进行汇总,制作出一份精美的汇总表,以便向高层领导汇报。但这个过程并不简单,因为汇总表需要进行单元格合并等格式操作,以确保数据的清晰展示。同时,有时还需要将总部的汇总表下发给各个分公司,这时又需要将合并的单元格进行拆分,并将对应分公司的数据分发给该公司

传统方法的低效与烦恼

他以往的工作流程是这样的:打开一个表格,逐个合并对应的单元格,保存;然后打开下一个表格,重复同样的操作。如果需要将总部的汇总表下发给各个分公司,他还需要逐个打开表格,进行单元格拆分,再保存。如此方法处理完一个表格通常需要5到10分钟,而面对上百个表格,这就意味着需要上千分钟的重复性工作。这种方式不仅效率极低,而且极易出错。

转折点:Python自动化技术的引入

在了解到朋友的困境后,我向他推荐了Python自动化技术。通过编写Python脚本,我们可以自动化地处理Excel表格的合并拆分工作,极大地提升工作效率。

Excel单元格合并

将A,B列相同内容的单元格进行合并

from openpyxl import load_workbook # 用于读取Excel中的信息def Merge_cells(ws, target_list, start_row, col): ''' ws: 是需要操作的工作表 target_list: 是目标列表,即含有重复数据的列表 start_row: 是开始行,即工作表中开始比对数据的行(需要将标题除开) col: 是需要处理数据的列 ''' start = 0 # 开始行计数,初试值为0,对应列表中的第1个元素的位置0 end = 0 # 结束行计数,初试值为0,对应列表中的第1个元素的位置0 reference = target_list[0] # 设定基准,以列表中的第一个字符串开始 for i in range(len(target_list)): # 遍历列表 if target_list[i] != reference: # 开始比对,如果内容不同执行如下 reference = target_list[i] # 基准变成列表中下一个字符串 end = i - 1 # 列计数器 ws.merge_cells(col + str(start + start_row) + ":"+col + str(end + start_row)) start = end + 1 if i == len(target_list) - 1: # 遍历到最后一行,按如下操作 end = i ws.merge_cells(col + str(start + start_row) + ":" + col + str(end + start_row))# 获取Excel表格中的数据wb = load_workbook('产品清单.xlsx')sheet_names = wb.get_sheet_names()for sheet_name in sheet_names: # 遍历每个工作表,抓取数据,并根据要求合并单元格 ws = wb[sheet_name] customer_list = [] # 客户名称 pn_list = [] # 产品编码 for row in range(6, ws.max_row-2): customer = ws['B' + str(row)].value pn = ws['C' + str(row)].value customer_list.append(customer) pn_list.append(pn) # 调用以上定义的合并单元格函数`Merge_cells`做单元格合并操作 start_row = 6 # 开始行是第六行 Merge_cells(ws, customer_list, start_row, "B") # "B" - 客户名称是在B列 Merge_cells(ws, pn_list, start_row, "C") # "C" - 产品编码是在C列wb.save("产品清单-合并单元.xlsx")

Excel合并单元格的拆分

import openpyxlpath = r"产品清单-合并单元.xlsx" # 源文件路径path_new = r"test02.xlsx" # 处理后新文件的保存路径# sheet_name = "1月" # 需要处理的页面名称"""读取Excel文件中要进行处理的页面"""book = openpyxl.load_workbook(path) # <class 'openpyxl.workbook.workbook.Workbook'>sheet_names = book.get_sheet_names()print(sheet_names)for sheet_name in sheet_names: print(sheet_name) sheet = book[sheet_name] # <class 'openpyxl.worksheet.worksheet.Worksheet'> """获取页面内所有已合并的单元格""" list_ranges = sheet.merged_cells.ranges.copy() # <class 'list'> print(list_ranges) """遍历每个含有合并单元格的区域""" for range in list_ranges: # range:<class 'openpyxl.worksheet.merge.MergedCellRange'> """该区域内的起始单元格""" cell_start = range.start_cell # <class 'openpyxl.cell.cell.Cell'> """将该区域内的单元格进行拆分""" sheet.unmerge_cells(range_string = range.coord) """遍历该区域内的所有(拆分后得到的)单元格""" for row_index, col_index in range.cells: cell = sheet.cell(row = row_index, column = col_index) cell.value = cell_start.valuebook.save(path_new)book.close()

成果:效率革命

通过Python自动化技术的应用,朋友的工作流程发生了革命性的变化。原本需要上千分钟的工作,现在只需几秒钟就能轻松完成。效率的提升不仅仅是数量级的,更是质的飞跃。

拥抱自动化,释放潜能

通过本文的介绍,我们学会了如何使用Python实现批量Excel单元格的合并与拆分。这不仅大大提高了我们的工作效率,还让我们更加深入地了解了Python在自动化办公领域的应用。相信在今后的工作中,Python将成为我们不可或缺的得力助手!

数海丹心

大数据和人工智能知识分享与应用

110篇原创内容

公众号

你是否也在为重复性工作而烦恼?在评论区留言,分享你的故事,让我们一起探讨如何用Python自动化技术简化工作,提升效率!

在文章的最后,别忘了点赞、分享和关注哦!如果你有任何关于Python自动化办公的问题或想法,欢迎在评论区留言,让我们一起交流,共同进步!

0 阅读:0

我是智能取经人

简介:感谢大家的关注