相关文章推荐
性感的小蝌蚪  ·  easyPOI ...·  2 周前    · 
瘦瘦的洋葱  ·  dpkg-buildpackage: ...·  1 年前    · 

这里要说明一下,本文包含的代码其中一部分并不是自己写的,是我找了很多文章拼凑出来的,比如如何找相同内容的单元格、怎么合并、怎么居中等等。出处许多,这边就不一个个放链接了。就当做一份自己写的学习笔记供大家参考。

本文结构 是分段讲解代码, 文末放全部的代码

处理前的单元格

----------------------->

可以看到有一些名字是重复的,我们现在要做的就是把这些重复的名字合并居中,程序执行完的效果如图。

(大家可能会说,这不是多此一举吗,直接点excel中的合并并居中不就好了? 但是在用程序处理大批量的excel表的时候,是非常减少人工成本的!!!!)

代码分解讲解

1. 首先,代码的思路 先将A列的内容读出放入一个列表中。

sumList = []
for i in range(2, sheet.max_row):
    value = sheet.cell(row=i, column=1).value
    if value:
        sumList.append(value)
    else:
        break

如果你要合并并居中的内容不在A列只要更改“column=”中的内容即可。

2. 进行合并单元格操作

preRow = 0
finRow = 0
flag = sumList[0]
for i in range(len(sumList)):
    if sumList[i] != flag:
        flag = sumList[i]
        finRow = i - 1
        if finRow >= preRow:
            sheet.merge_cells("A{}:A{}".format(preRow+2, finRow+2))
            preRow = finRow + 1
    if i == len(sumList) - 1:
        finRow = i
        sheet.merge_cells("A{}:A{}".format(preRow+2, finRow+2))

这里注意,如果你要合并的内容是从第二行开始的(我的第一行是表头),就在format中preRow和finRow的值加2就可以了(因为openpyxl是用1开始计数)

同样,如果是内容是从第三行开始就在format中preRow和finRow的值加 3即可。

着急的小伙伴可以不用看懂这部分代码,只要按照我上面的提示修改内容即可直接复制黏贴这段代码拿过来用!!

3. 进行第一列单元格居中操作

wsArea = sheet["A{}:A{}".format(2, 2+len(sumList))]
for i in wsArea:
    for j in i:
        j.alignment = Alignment(horizontal='center', vertical='center')

本文全部代码

import os
import openpyxl
from openpyxl.styles import Alignment
# 获得当前py文件的路径
path = os.getcwd()
# 打开py文件目录下的名为test.xlsx文件的第一张sheet页
wb = openpyxl.load_workbook(path + "/test.xlsx")
sheet = wb["Sheet1"]
# 先把A列的所有内容放入一个List中
sumList = []
for i in range(2, sheet.max_row+1):
    value = sheet.cell(row=i, column=1).value
    if value:
        sumList.append(value)
    else:
        break
# 开始合并单元格
preRow = 0
finRow = 0
flag = sumList[0]
for i in range(len(sumList)):
    if sumList[i] != flag:
        flag = sumList[i]
        finRow = i - 1
        if finRow >= preRow:
            sheet.merge_cells("A{}:A{}".format(preRow+2, finRow+2))
            preRow = finRow + 1
    if i == len(sumList) - 1:
        finRow = i
        sheet.merge_cells("A{}:A{}".format(preRow+2, finRow+2))
# 居中单元格
wsArea = sheet["A{}:A{}".format(2, 2+len(sumList))]
for i in wsArea:
    for j in i:
        j.alignment = Alignment(horizontal='center', vertical='center')
# 保存表
wb.save(path + '/test1.xlsx')

这篇代码的核心我已经分别的讲述了,可告诉大家如何改可以改成自己喜欢的代码,和执行效果,希望对大家有用~

Python相关视频讲解:python的or运算赋用法用python编程Excel有没有用处?011_编程到底好玩在哪?查看python文件_输出py文件_cat_运行python文件_shelPython中的merge_cells固定 在使用Python进行数据处理和分析时,经常会涉及到表格数据的处理和展示。在处...
# 需要合并的左上方和右下方单元格坐标 ws.merge_cells(range_string='A1:B3') ws.merge_cells(start_row=5, start_column=4, end_row=8, end_column=8) # 单元格取消合并使用unmerge_cells ws.unmerge_cells(range_string='A1:B3') [TOC] 1. 前言 本文是通过Python的第三方库openpyxl, 该库根据官方介绍是支持Excel 2010 的 xlsx/xlsm/xltx/xltm格式文件,哪个版本的这些格式应该都可以支持。 作为网络攻城狮的我们,使用pythonexcel的基本操作技能就可以了,当然能够精通更好了。 那我们使用openpyxl有何作用?我是想后面跟大家分享一篇批量备份网络设备配置的文章,里面会涉及到对excel的操作,就提前给大家分享下如何操作基本的exce # 打开 Excel 文件并定位到需要操作的工作表 workbook = openpyxl.load_workbook('example.xlsx') worksheet = workbook.active # 遍历需要合并单元格,判断它们是否符合条件 start_row = 2 start_col = 1 prev_value = worksheet.cell(row=start_row, column=start_col).value for row in range(start_row, worksheet.max_row + 1): current_value = worksheet.cell(row=row, column=start_col).value if current_value != prev_value: # 如果符合条件,将这些单元格合并 if row - start_row > 1: worksheet.merge_cells(start_row=start_row, start_column=start_col, end_row=row - 1, end_column=start_col) # 重置起始行和 start_row = row prev_value = current_value # 保存并关闭 Excel 文件 workbook.save('example.xlsx') workbook.close() 你可以根据自己的实际需求来修改代码,比如改变起始行和列、修改判断条件等。