import os from typing import Counter import openpyxl from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font import datetime import random from tkinter import * import tkinter as tk import tkinter.filedialog import tkinter.messagebox def start(): window = tk.Tk() # 创建窗口对象的背景色 window.title('随机边长填表程序') # 设置窗口的标题 window.geometry('400x275') # 设置窗口的大小 title = tk.Label(window, text='随机边长填表程序', font=('微软雅黑', 12), width=40, height=3) title.place(x=0,y=0,anchor='nw') choosepath = tk.Label(window,text='选择成果表:',font=('微软雅黑',12),width=20,height=2) choosepath.place(x=0,y=50,anchor='nw') path_var1 = tk.StringVar() #输入路径 entry1 = tk.Entry(window, textvariable=path_var1) entry1.place(x=170, y=65, anchor='nw') exceltext = tk.Label(window,text='选择精度检测表:',font=('微软雅黑',12),width=20,height=2) exceltext.place(x=0,y=100,anchor='nw') path_var2 = tk.StringVar() #输入路径 entry2 = tk.Entry(window, textvariable=path_var2) entry2.place(x=170, y=110, anchor='nw') def choose1(): filename=tkinter.filedialog.askopenfilename(filetypes=[("xls,xlsx格式",".xlsx")]) path_var1.set(filename) def choose2(): filename2=tkinter.filedialog.askopenfilename(filetypes=[("xls,xlsx格式",".xlsx")]) path_var2.set(filename2) def tuichu(): window.destroy() def unmergecell(path): tdata3 = openpyxl.load_workbook(path) sheetna3 = tdata3.sheetnames sheet3 = tdata3[sheetna3[0]] tabledd = 1 writemm = 8 while tabledd > 0 and tabledd < 4: dataend1 = sheet3.cell(row=writemm, column=1).value if dataend1 != None and tabledd < 3: sheet3.unmerge_cells(start_row=writemm, start_column=1, end_row=writemm, end_column=6) sheet3.unmerge_cells(start_row=writemm, start_column=7, end_row=writemm, end_column=8) tdata3.save(path) tabledd = tabledd + 1 writemm = writemm + 1 elif tabledd == 3: sheet3.unmerge_cells(start_row=writemm, start_column=1, end_row=writemm, end_column=3) sheet3.unmerge_cells(start_row=writemm, start_column=4, end_row=writemm, end_column=6) sheet3.unmerge_cells(start_row=writemm, start_column=7, end_row=writemm, end_column=8) tdata3.save(path) tabledd = tabledd + 1 writemm = writemm + 1 else: writemm = writemm + 1 tdata3.save(path) tdata3.close() def main(): starttime = datetime.datetime.now() print (str(starttime)) path1 = entry1.get() path2 = entry2.get() #先读 #先读一遍就把那三行全部拆了 unmergecell(path2) tdata = openpyxl.load_workbook(path1) tdata2 = openpyxl.load_workbook(path2) qzbhnum = "null" writeii = 8 sheetna = tdata.sheetnames sheetna2 = tdata2.sheetnames sheet2 = tdata2[sheetna2[0]] #这里需要读取每一个表,所以创建循环,当此张表是空表时tablecc变为-1,结束循环 tableii = 0 tablecc = 1 while tablecc == 1: try: sheet1 = tdata[sheetna[tableii]] except: break #判断A10是否有数据 tableda = sheet1.cell(row=10, column=1).value if tableda != 1: tablecc = -1 else: #寻找第二个1所在的单元格,确定点数,方便随机数 secondii = 12 secondcc = 1 while secondcc == 1: tableda2 = sheet1.cell(row=secondii, column=1).value if tableda2 == 1 or secondii == 80: if secondii == 80: secondcc = -1 Count2 = 34 else: #count1是最终点数,因为random从0开始,所以本来13的数就变成了12 secondcc = -1 Count0 = secondii - 12 Count1 = Count0 / 2 Count2 = int(Count1) #随机一个数 ranok = -1 while ranok == -1: ran0 = random.choice(range(Count2)) #获取边长 bcrow0 = ran0 * 2 bcrow1 = bcrow0 + 11 bclen = sheet1.cell(row=bcrow1, column=5).value if float(bclen) < 2: ranok = -1 else: ranok = 1 ran1 = ran0 + 1 #做个判断,判断是否是最后一个数 if ran1 == Count2 + 1 and ran1 != 35: ran2 = 1 elif ran1 == 35: ran2 = ran1 + 1 else: ran2 = ran1 + 1 #第一个单元格需要填入的信息整合下 str1 = 'J' + str(ran1) + '-J' + str(ran2) #判断下是否超出空白范围 dataend = sheet2.cell(row=writeii,column=1).value cellborder = Border(left=Side(border_style='thin',color='FF000000'),right=Side(border_style='thin',color='FF000000'), top=Side(border_style='thin',color='FF000000'),bottom=Side(border_style='thin',color='FF000000')) alignmentcell=Alignment(horizontal='center',vertical='bottom') #前三行需要拆分单元格 if dataend != None: sheet2.insert_rows(writeii,1) sheet2.cell(row=writeii,column=1).border = cellborder sheet2.cell(row=writeii,column=2).border = cellborder sheet2.cell(row=writeii,column=3).border = cellborder sheet2.cell(row=writeii,column=4).border = cellborder sheet2.cell(row=writeii,column=5).border = cellborder sheet2.cell(row=writeii,column=6).border = cellborder sheet2.cell(row=writeii,column=7).border = cellborder sheet2.cell(row=writeii,column=8).border = cellborder sheet2.merge_cells(start_row=writeii, start_column=1, end_row=writeii, end_column=2) sheet2.merge_cells(start_row=writeii, start_column=3, end_row=writeii, end_column=4) sheet2.merge_cells(start_row=writeii, start_column=5, end_row=writeii, end_column=6) sheet2.cell(row=writeii,column=1).alignment = alignmentcell sheet2.cell(row=writeii,column=3).alignment = alignmentcell sheet2.cell(row=writeii,column=5).alignment = alignmentcell sheet2.cell(row=writeii,column=7).alignment = alignmentcell sheet2.cell(row=writeii,column=8).alignment = alignmentcell sheet2.cell(row=writeii,column=1).value=str1 sheet2.cell(row=writeii,column=3).value=bclen #填写编号 bhnum = sheet1.cell(row=3, column=1).value bhnum1 = bhnum.split('J',1) qzbhnum = bhnum1[0][-6:] bhnum2 = "J" + str(bhnum1[1]) sheet2.cell(row=writeii,column=8).value=bhnum2 tableii = tableii + 1 writeii = writeii + 1 tdata2.save(path2) else: secondii = secondii + 2 sheet2.cell(row=3,column=7).value=qzbhnum sheet2.cell(row=writeii,column=1).value= "检测数量:"+ str(tableii) + " 个" #再把最后三个合回去 sheet2.merge_cells(start_row=writeii, start_column=1, end_row=writeii, end_column=6) sheet2.merge_cells(start_row=writeii, start_column=7, end_row=writeii, end_column=8) sheet2.merge_cells(start_row=writeii+1, start_column=1, end_row=writeii+1, end_column=6) sheet2.merge_cells(start_row=writeii+1, start_column=7, end_row=writeii+1, end_column=8) sheet2.merge_cells(start_row=writeii+2, start_column=1, end_row=writeii+2, end_column=3) sheet2.merge_cells(start_row=writeii+2, start_column=4, end_row=writeii+2, end_column=6) sheet2.merge_cells(start_row=writeii+2, start_column=7, end_row=writeii+2, end_column=8) tdata2.save(path2) tdata2.close() endtime = datetime.datetime.now() print (str(endtime)) tkinter.messagebox.showinfo(title='结束',message='运行成功!') window.destroy() tk.Button(window, text='选择', command=choose1).place(x=350, y=50, anchor='nw') tk.Button(window, text='选择', command=choose2).place(x=350, y=100, anchor='nw') tk.Button(window,text='确认',command=main).place(x=120,y=150,anchor='nw') tk.Button(window,text='取消',command=tuichu).place(x=230,y=150,anchor='nw') noticemes = tk.Label(window,text='请务必删除中间已填写的内容,再运行!',fg="red",font=('微软雅黑',12),width=35,height=2) noticemes.place(x=10,y=180,anchor='nw') noticemes = tk.Label(window,text='请等待弹出 运行成功 窗口再关闭程序!',fg="red",font=('微软雅黑',12),width=35,height=2) noticemes.place(x=10,y=220,anchor='nw') window.mainloop() if __name__ == '__main__': # main(r"D:\1work_now\20210819\新建文件夹\大坪子村大坪子组界址点成果表.xlsx",r"D:\1work_now\20210819\新建文件夹\2 相对位置精度检测表.xlsx") start()