介绍
这篇文章主要介绍了使用Python怎么操作Excel实现自动分组合并单元格,小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随小编来看看吧!
df.to_excel (& # 39; test.xlsx& # 39;,指数=False) 得到openpyxl import  load_workbook 世行=load_workbook (& # 39; test.xlsx& # 39;) 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,如何能使程序自动获取连续的起始点呢?其实我们使用一个groupby就发现了方法了!大家看到了吗?
真是柳暗花明又一村啊,完整解决方案已经有了,我封装到了tkinter里面,请看!
# - *安康;编码:utf-8 - * - import tkinter  as tk #使用Tkinter前需要先导入 弹出窗口,得到tkinter import  filedialog ttk 得到openpyxl import  load_workbook 得到openpyxl.styles import 对齐 import 操作系统 import pandas  as pd #建立窗口窗口 时间=window tk.Tk () window.title (& # 39; Excel合并单元格工具& # 39;) w_width=630 w_height=600 scn_width=window.maxsize () [0] x_point=(scn_width-w_width)//2 window.geometry (& # 39; % dx % d + % d + % d # 39;, % (w_width, w_height x_point 100)) window.wm_attributes (& # 39; -topmost& # 39;,真的) window.tk_focusFollowsMouse () window.bind (“& lt; Escape>“, lambda 事件:window.iconify ()) path_tar=tk.StringVar () sheetvar=tk.StringVar(),,,, #目标工作表 #打开目标文件 def getmergefile (): ,file_path=filedialog.askopenfilename (title=u # 39;选择文件& # 39;,文件类型=((& # 39;excel # 39; & # 39; .xlsx& # 39;))) ,path_tar.set (file_path) ,alldata=https://www.yisu.com/zixun/pd.read_excel (file_path,没有) ttk.Label(第一帧,文本="请选择目标工作表:“).grid(行=1,列=0,粘性=' w ') 全球sheetvar chosen_sheet=ttk.Combobox(第一帧,宽度=16,textvariable=sheetvar) chosen_sheet(“价值”)=(alldata)列表 chosen_sheet.grid(行=1,列=1,粘性=' w ') chosen_sheet。bind (“”,λ事件:getmergeseg(事件、alldata sheetvar.get ())) #勾选目标字段 def getmergeseg(事件、alldata表): 全球frame2 segvars segvars=[] 试一试: frame2.destroy () 除了: 通过 frame2=tk.Frame(窗口、padx=15 pady=6) frame2.grid(行=1,列=0,粘性=' w ') ttk.Label (frame2、文本="请勾选分组合并的目标字段(第一个勾选框为分组合并依据,必须事先进行排序:”).grid(行=0,列=0,columnspan=4,粘性=' w ') data=alldata(表) 指数,项列举(data.columns): segvars.append (tk.StringVar ()) ttk.Checkbutton (frame2、文本=项变量=segvars [1], onvalue=条目,offvalue=") .grid(行=(索引//4 + 1)=指数% 4列,粘性=' w ') #合并字段单元格 def合并(文件、表segvars): 选择=[i.get()因为我segvars如果i.get ()) df=pd.read_excel(文件、表) 世行=load_workbook(文件) ws=wb(表) mergecells (ws, df,选择) 试一试: wb.save(文件) messagebox.showinfo(“提示”,文件+“-”+表+”指定单元格合并完成”) 操作系统。系统(“开始”+ os.path.dirname(文件) 除了例外e: messagebox.showerror(“警告”,str (e)) #合并单元格函数 def mergecells (ws, df,峡路): 坳=关口[0] gdic=df.groupby .groups (col) aligncenter=对齐(水平=爸行摹?垂直=爸行摹? 在gdic gname: 指标=gdic gname + 2 指标=indexs.sort_values () 上校的关口:#每一个要合并的字段 colindex=df.columns.tolist () .index (col) + 1 ws.merge_cells (start_row=指标[0],end_row=指标[1],start_column=colindex end_column=colindex) #合并 我的范围(1,ws.max_row + 1): #实现居中 ws.cell(行=我列=colindex) .alignment=aligncenter def手册():#使用说明 信息=" " 作用是合并单元格,把同样内容的单元格合并到一起,所以必须实现对目标字段进行排序,否则无法实现合并 ”“” messagebox.showinfo(“提示”,信息) 第一?tk.Frame(窗口、pady=6 padx=15) frame1.grid(行=0,列=0,粘性=' w ') ttk.Button(第一帧,文本="打开目标文件”,命令=getmergefile) .grid(行=0,列=0,粘性=' w ') ttk.Entry(第一帧,textvariable=path_tar宽度=40).grid(行=0,列=1) frame3=tk.Frame(窗口、pady=10 padx=15) frame3.grid(行=2,列=0,粘性=' w ') ttk.Button (frame3、文本="点击合并单元格”,命令=λ:合并(path_tar.get (), sheetvar.get (), segvars)) .grid(行=0,列=0,粘性=' w ') ttk.Button (frame3、文本="使用说明”,命令=手册).grid(行=0,列=1) window.mainloop () 使用Python怎么操作Excel实现自动分组合并单元格