网络编程
位置:首页>> 网络编程>> Python编程>> Python excel合并居中值相同的单元格实例代码

Python excel合并居中值相同的单元格实例代码

作者:一根咸鱼_  发布时间:2021-09-24 13:40:47 

标签:python,合并,单元格

前言

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

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

处理前的单元格

Python excel合并居中值相同的单元格实例代码  ----------------------->Python excel合并居中值相同的单元格实例代码

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

(大家可能会说,这不是多此一举吗,直接点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):
   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')

来源:https://blog.csdn.net/weixin_47597129/article/details/124319638

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com