吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1862|回复: 12
收起左侧

[Python 原创] 超级干货系列-合并excel相邻单元格

  [复制链接]
Eks6666 发表于 2024-4-11 19:38
[Python] 纯文本查看 复制代码
#定义合并单元格的函数    
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表格中的数据
from openpyxl import load_workbook #用于读取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")

免费评分

参与人数 1吾爱币 +5 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lantiantian 发表于 2024-4-11 20:01
去试试看能不能
 楼主| Eks6666 发表于 2024-4-11 20:41
zhang37078381 发表于 2024-4-11 21:47
xiayusammr 发表于 2024-4-11 23:22
我就想去试试,不管行不行
棉周 发表于 2024-4-12 07:12
这样真的可以吗?马上弄弄,谢谢
 楼主| Eks6666 发表于 2024-4-12 15:26
xiayusammr 发表于 2024-4-11 23:22
我就想去试试,不管行不行

可以的,铁子,写代码的时候就已经试过了的
 楼主| Eks6666 发表于 2024-4-12 15:26
棉周 发表于 2024-4-12 07:12
这样真的可以吗?马上弄弄,谢谢

可以的,铁子,写代码的时候就已经试过了的
11414 发表于 2024-4-16 09:17
让我试试, 哈哈
 楼主| Eks6666 发表于 2024-4-16 12:30
11414 发表于 2024-4-16 09:17
让我试试, 哈哈

可以的,铁子
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 08:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表