123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- 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()
|