大家好,我们经常会有这样的需求。比如下图

我们需要把同一个省份的合并起来,如下图的效果

如何实现呢,这是原有的df

直观的操作是这样的:

df.to_excel('test.xlsx',index=False)

from openpyxl import load_workbook

wb=load_workbook('test.xlsx')

ws=wb.active()

ws.merge_cells(start_row=2,end_row=8,start_column=1,end_column=1)

ws.merge_cells(start_row=2,end_row=8,start_column=2,end_column=2)

ws.merge_cells(start_row=9,end_row=14,start_column=1,end_column=1)

ws.merge_cells(start_row=9,end_row=14,start_column=2,end_column=2)

ws.merge_cells(start_row=15,end_row=18,start_column=1,end_column=1)

ws.merge_cells(start_row=15,end_row=18,start_column=2,end_column=2)

wb.save()

只是问题在于我们不能总是人工判断start_row和end_row,如何能使程序自动获取row的起始点呢?其实我们使用一个groupby就发现了方法了!大家看到了吗?

真是柳暗花明又一村啊,完整解决方案已经有了,我封装到了tkinter里面,请看!

#-*- coding:utf-8 -*-

import tkinter as tk #使用Tkinter前需要先导入

from tkinter import filedialog,messagebox,ttk

from openpyxl import load_workbook

from openpyxl.styles import Alignment

import os

import pandas as pd

#建立窗口window

window = tk.Tk()

window.title('Excel合并单元格工具')

w_width=630

w_height=600

scn_width=window.maxsize()[0]

x_point=(scn_width-w_width)//2

window.geometry('%dx%d+%d+%d' %(w_width,w_height,x_point,100))

window.wm_attributes('-topmost',True)

window.tk_focusFollowsMouse()

window.bind("",lambda event:window.iconify())

path_tar=tk.StringVar()

sheetvar=tk.StringVar() #目标工作表

#打开目标文件

def getmergefile():

file_path=filedialog.askopenfilename(title=u'选择文件',filetype=[('Excel','.xlsx')])

path_tar.set(file_path)

alldata=pd.read_excel(file_path,None)

ttk.Label(frame1,text="请选择目标工作表:").grid(row=1,column=0,sticky='w')

global sheetvar

chosen_sheet=ttk.Combobox(frame1,width=16,textvariable=sheetvar)

chosen_sheet['values']=list(alldata)

chosen_sheet.grid(row=1,column=1,sticky='w')

chosen_sheet.bind("<>",lambda event:getmergeseg(event,alldata,sheetvar.get()))

#勾选目标字段

def getmergeseg(event,alldata,sheet):

global frame2,segvars

segvars=[]

try:

frame2.destroy()

except:

pass

frame2=tk.Frame(window,padx=15,pady=6)

frame2.grid(row=1,column=0,sticky='w')

ttk.Label(frame2,text="请勾选分组合并的目标字段(第一个勾选框为分组合并依据,必须事先进行排序:").grid(row=0,column=0,columnspan=4,sticky='w')

data=alldata[sheet]

for index,item in enumerate(data.columns):

segvars.append(tk.StringVar())

ttk.Checkbutton(frame2,text=item,variable=segvars[-1],onvalue=item,offvalue='').grid(row=(index//4+1),column=index%4,sticky='w')

#合并字段单元格

def merging(file,sheet,segvars):

selected=[i.get() for i in segvars if i.get()]

df=pd.read_excel(file,sheet)

wb=load_workbook(file)

ws=wb[sheet]

mergecells(ws,df,selected)

try:

wb.save(file)

messagebox.showinfo('提示',file+'-'+sheet+'指定单元格合并完成')

os.system('start '+os.path.dirname(file))

except Exception as e:

messagebox.showerror('警告',str(e))

#合并单元格函数

def mergecells(ws,df,cols):

col=cols[0]

gdic=df.groupby(col).groups

aligncenter=Alignment(horizontal='center',vertical='center')

for gname in gdic:

indexs=gdic[gname]+2

indexs=indexs.sort_values()

for col in cols: #每一个要合并的字段

colindex=df.columns.tolist().index(col)+1

ws.merge_cells(start_row=indexs[0],end_row=indexs[-1],start_column=colindex,end_column=colindex) #合并

for i in range(1,ws.max_row+1): #实现居中

ws.cell(row=i,column=colindex).alignment=aligncenter

def manual(): #使用说明

info="""

作用是合并单元格,把同样内容的单元格合并到一起,所以必须实现对目标字段进行排序,否则无法实现合并

"""

messagebox.showinfo('提示',info)

frame1=tk.Frame(window,pady=6,padx=15)

frame1.grid(row=0,column=0,sticky='w')

ttk.Button(frame1,text="打开目标文件",command=getmergefile).grid(row=0,column=0,sticky='w')

ttk.Entry(frame1,textvariable=path_tar,width=40).grid(row=0,column=1)

frame3=tk.Frame(window,pady=10,padx=15)

frame3.grid(row=2,column=0,sticky='w')

ttk.Button(frame3,text="点击合并单元格",command=lambda:merging(path_tar.get(),sheetvar.get(),segvars)).grid(row=0,column=0,sticky='w')

ttk.Button(frame3,text="使用说明",command=manual).grid(row=0,column=1)

window.mainloop()

效果如图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持站圈网。

python合并单元格居中_Python实现Excel自动分组合并单元格相关推荐

  1. python合并单元格居中_Python基于xlrd模块处理合并单元格

    目的: python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式. 总体思路: (1)要想实现对Excel数据的读取,需要用到第三方应用,直接应用. (2)实际操作时候和我们实际 ...

  2. Python—一键实现Excel自动分组合并单元格

    大家好,我们经常会有这样的需求.比如下图 我们需要把同一个省份的合并起来,如下图的效果 如何实现呢,这是原有的df 直观的操作是这样的: df.to_excel('test.xlsx',index=F ...

  3. python制作表格的语句_python根据Excel自动生成创建表sql语句

    1.Excel格式截图 2.配置文件脚本 # coding:utf-8 # 表英文名 table_name = '表英文名' # 表中文名 table_comments = '表中文名' # Exce ...

  4. python合并单元格处理_Python基于xlrd模块处理合并单元格

    目的: python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式. 总体思路: (1)要想实现对Excel数据的读取,需要用到第三方应用,直接应用. (2)实际操作时候和我们实际 ...

  5. python excel单元格坐标_python简单Excel操作

    以此为例: 1. workbook对象 wb = openpyxl.load_workbook(fileName) 属性: sheetsNames =wb.sheetnames 所有表的名字 shee ...

  6. python邮件合并的基本操作步骤_Python如何实现反向邮件合并功能

    摘要:邮件合并是Office的一项功能,可便捷地批量生成文档,却无法从大量Word文档中汇总信息.结合实际应用,阐述基于Python语言对Word文档进行批量导入.读取其中的表格与段落.汇总信息至Ex ...

  7. python怎么读出当前时间_Python读取Excel,日期列读出来是数字的处理

    Python读取Excel,里面如果是日期,直接读出来是float类型,无法直接使用. 通过判断读取表格的数据类型ctype,进一步处理. 返回的单元格内容的类型有5种: ctype: 0 empty ...

  8. excel实现分组合并后居中

    帮一个前同事搞一个分组合并居中,还是查了半天,记录下 一.前后效果对比 二.操作步骤 1.选中A列,分类汇总 2.选中A2-A21,ctrl+g定位条件,选空值,然后写=A1,ctrl+enter,然 ...

  9. python自动生成统计表_python处理Excel自动统计表

    python处理Excel自动统计表 使用python库xlutils.xlrd.xlwt. 设计思路 使用xlrd.open_workbook读取统计数据表 做一个总数据的空列表, 使用for循环将 ...

  10. python在excle教程全集_Python对Excel操作教程

    Python 对 Excel 操作详解 文档摘要: 本文档主要介绍如何通过 python 对 office excel 进行读写操作,使用 了 xlrd . xlwt 和 xlutils 模块. 另外 ...

最新文章

  1. 【Netty】Netty线程模型和EventLoop
  2. 高等数学:第二章 导数与微分(3)函数微分 近似计算
  3. ARouter源码探究
  4. GDCM:转储一个DICOM文件,显示DICOM中的结构和值的测试程序
  5. python小案例下载_python 小案例demo06
  6. 二维数组作为形参,传递二维数组的值
  7. HDFS : RemoteException Operation category READ is not supported in state standby.
  8. JS动态加载JSON文件并读取数据
  9. 主流的质量管理和项目管理及研发管理体系探索
  10. EXCEL多元回归分析
  11. SaaSBase:最适合小团队轻量级项目管理的软件——Tower
  12. python方差分析误差棒_一文讲透,带你学会用Python绘制带误差棒的柱状图和条形图...
  13. session set()用法php,PHP 使用 session_set_save_handler()
  14. Windows10系统下电脑时间不对,怎么办?
  15. 计算机开机硬件检查,开机bios检测硬件信息方法
  16. 如何更新neovim以及安装指定版本
  17. 2022-2028年中国喷砂设备行业发展动态及投资前景分析报告
  18. R语言实战应用精讲50篇(三十五)-R语言实现xgboost回归(附R语言代码)
  19. windows编程之画五角星
  20. 【Python游戏】可以实现双人对战游戏,类似拳皇可以选英雄的 绝对好玩 | 附带源码

热门文章

  1. [51nod]1284 2 3 5 7的倍数
  2. android app唯一标识符,android 唯一识别码笔记
  3. python默认字体_matplotlib默认字体设置
  4. c++ 开方_20款丨空调控制系统的三种打开方式
  5. 边境线 详解(C++)
  6. OpenCV图像处理基础操作(4)
  7. 电容充放电原理图_HDI滤波电容FANOUT案例
  8. c语言分数等级switch,用switch输出分数等级
  9. linux定时器王贤才,《linux内核设计与实现》 学习笔记(十七)---设备和模块
  10. php 去除 ufeff,PHP去掉诡异的BOM \ufeff