首页 > 编程语言 >python之xlsx合并单元格

python之xlsx合并单元格

时间:2022-12-06 10:58:22浏览次数:36  
标签:xlsx sheet file python 单元格 column sumList print path

需求背景:

工作中将数据保存xlsx文件之后,里面每一列中有很多重复的看着很不美观,需要将每一列中的相同值合并起来,是表格看起来美观简洁

处理前

处理后

直接上代码(内涵注释讲解)

"""
-*- coding: utf-8 -*-
@Time : 2022/12/6 10:10
@Author : Logan
@File : xlxs_test.py
@Comment :  合并单元格
"""
import os
import openpyxl


def merge_xlsx(file):
    '''
    合并单元格
    :param file: 需要合并的文件
    :return:
    '''
    # 打开文件目录下的文件的第一张sheet页
    wb = openpyxl.load_workbook(os.path.join(path, file))
    sheet = wb["Sheet1"]
    print(sheet.max_row)  # 总行数
    print(sheet.max_column)  # 总列数
    # 将 所有的 列号保存下来
    column_list = []
    for i in range(1, sheet.max_column + 1):
        value = sheet.cell(row=2, column=i)
        # value.coordinate 获取当前值所在的坐标 ---> A1, B1, C1
        column_list.append(value.coordinate[0])
    print(column_list)
    # 遍历每一列 去合并
    for index, letter in enumerate(column_list):
        sumList = []
        print(sumList)
        print(letter)
        # 先把每一列列的所有内容放入sumList中
        for i in range(2, sheet.max_row + 1):
            value = sheet.cell(row=i, column=index + 1).value
            if value:
                sumList.append(value)
            else:
                sumList.append('')
        print(sumList)
        # 开始合并单元格
        prow = 0
        frow = 0
        flag = sumList[0]
        for i in range(len(sumList)):
            if sumList[i] != flag:
                flag = sumList[i]
                frow = i - 1
                if frow >= prow:
                    # merge_cells() ---> 合并指定坐标
                    sheet.merge_cells(f"{letter}{prow + 2}:{letter}{frow + 2}")
                    prow = frow + 1
            if i == len(sumList) - 1:
                frow = i
                sheet.merge_cells(f"{letter}{prow + 2}:{letter}{frow + 2}")

        print(f'合并完成一列: {letter}')
    # 保存表
    wb.save(os.path.join(path, file))
    print(f'操作完毕')


if __name__ == '__main__':
    # 需要操作的文件
    file_name = 'test_xlsx.xlsx'
    # 获得当前py文件的路径
    path = os.getcwd()
    print(os.path.join(path, file_name))
    merge_xlsx(file=file_name)

标签:xlsx,sheet,file,python,单元格,column,sumList,print,path
From: https://www.cnblogs.com/smallbike/p/merge_cells.html

相关文章

  • 【python】求最大公约数、最小公倍数、回文数、素数
    1.最大公约数最大公因子,指两个或多个整数共有约数中最大的一个。如(12,16)的公约数有1,2,4,最大的为4。defgcd(x,y):(x,y)=(y,x)ifx>yelse(x,y)fo......
  • Python数据分析入门--Pandas库学习
    Pandas库学习相较于numpy库关注数据结构的表达,pandas库更关注数据的应用表达1.Pandas库的Series类型1.1Series类型的组成Series类型由一组数据及与之相关的数据索引......
  • Python工具箱 — 创建工具箱
    如果是Python新手,使用ArcPy自定义脚本通过向导创建脚本工具箱非常简单。但它在数据类型、许可检查和管理维护等方面存在弊端,因此,从ArcGIS10.1起,对于经验比较丰富的用户......
  • python爬虫爬取网易云音乐(超详细教程,附源码)
    一、前言先说结论,目前无法下载无损音乐,也无法下载vip音乐。此代码模拟web网页js加密的过程,向api接口发送参数并获取数据,仅供参考学习,如果需要下载网易云音乐,不如直接在......
  • Python之路【第五篇】:面向对象及相关
    1.面向对象基础基础内容介绍详见一下两篇博文:面向对象初级篇面向对象进阶篇 2.其他相关2.1isinstance(obj,cls)检查是否obj是否是类cls的对象clas......
  • python函数入门
    1.函数的作用#sum()max()min()len()type()#使用函数都需要加一个括号#有自己的功能#'a'.replace()#称为方法点出来的有括号的称为方法#a.name#称为......
  • Selenium4+Python3系列(十一) - Page Factory设计模式
    写在前面:PageObject模式,目的是将元素定位和元素操作分层,只接触测试内容,不写基础内容,便于后续对自动化测试用例体系的维护,这是中心思想,也是核心。那么我们继续将简洁延续,......
  • Selenium4+Python3系列(十一) - Page Factory设计模式
    写在前面:PageObject模式,目的是将元素定位和元素操作分层,只接触测试内容,不写基础内容,便于后续对自动化测试用例体系的维护,这是中心思想,也是核心。那么我们继续将简洁延续......
  • Python中的数字
    在编程中,经常使用数字来记录游戏得分、表示可视化数据、存储Web应用信息等。Python根据数字的用法以不同的方式处理它们。鉴于整数使用起来最简单,下面就先来看看Python是如......
  • python 面向对象(进阶篇)
    上一篇《Python面向对象(初级篇)》文章介绍了面向对象基本知识:面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用类是一个模板,模板中包装了多......