工具箱相关
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import os
  2. from typing import Counter
  3. import openpyxl
  4. from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
  5. import datetime
  6. import random
  7. from tkinter import *
  8. import tkinter as tk
  9. import tkinter.filedialog
  10. import tkinter.messagebox
  11. def start():
  12. window = tk.Tk() # 创建窗口对象的背景色
  13. window.title('随机边长填表程序') # 设置窗口的标题
  14. window.geometry('400x275') # 设置窗口的大小
  15. title = tk.Label(window, text='随机边长填表程序', font=('微软雅黑', 12), width=40, height=3)
  16. title.place(x=0,y=0,anchor='nw')
  17. choosepath = tk.Label(window,text='选择成果表:',font=('微软雅黑',12),width=20,height=2)
  18. choosepath.place(x=0,y=50,anchor='nw')
  19. path_var1 = tk.StringVar() #输入路径
  20. entry1 = tk.Entry(window, textvariable=path_var1)
  21. entry1.place(x=170, y=65, anchor='nw')
  22. exceltext = tk.Label(window,text='选择精度检测表:',font=('微软雅黑',12),width=20,height=2)
  23. exceltext.place(x=0,y=100,anchor='nw')
  24. path_var2 = tk.StringVar() #输入路径
  25. entry2 = tk.Entry(window, textvariable=path_var2)
  26. entry2.place(x=170, y=110, anchor='nw')
  27. def choose1():
  28. filename=tkinter.filedialog.askopenfilename(filetypes=[("xls,xlsx格式",".xlsx")])
  29. path_var1.set(filename)
  30. def choose2():
  31. filename2=tkinter.filedialog.askopenfilename(filetypes=[("xls,xlsx格式",".xlsx")])
  32. path_var2.set(filename2)
  33. def tuichu():
  34. window.destroy()
  35. def unmergecell(path):
  36. tdata3 = openpyxl.load_workbook(path)
  37. sheetna3 = tdata3.sheetnames
  38. sheet3 = tdata3[sheetna3[0]]
  39. tabledd = 1
  40. writemm = 8
  41. while tabledd > 0 and tabledd < 4:
  42. dataend1 = sheet3.cell(row=writemm, column=1).value
  43. if dataend1 != None and tabledd < 3:
  44. sheet3.unmerge_cells(start_row=writemm, start_column=1, end_row=writemm, end_column=6)
  45. sheet3.unmerge_cells(start_row=writemm, start_column=7, end_row=writemm, end_column=8)
  46. tdata3.save(path)
  47. tabledd = tabledd + 1
  48. writemm = writemm + 1
  49. elif tabledd == 3:
  50. sheet3.unmerge_cells(start_row=writemm, start_column=1, end_row=writemm, end_column=3)
  51. sheet3.unmerge_cells(start_row=writemm, start_column=4, end_row=writemm, end_column=6)
  52. sheet3.unmerge_cells(start_row=writemm, start_column=7, end_row=writemm, end_column=8)
  53. tdata3.save(path)
  54. tabledd = tabledd + 1
  55. writemm = writemm + 1
  56. else:
  57. writemm = writemm + 1
  58. tdata3.save(path)
  59. tdata3.close()
  60. def main():
  61. starttime = datetime.datetime.now()
  62. print (str(starttime))
  63. path1 = entry1.get()
  64. path2 = entry2.get()
  65. #先读
  66. #先读一遍就把那三行全部拆了
  67. unmergecell(path2)
  68. tdata = openpyxl.load_workbook(path1)
  69. tdata2 = openpyxl.load_workbook(path2)
  70. qzbhnum = "null"
  71. writeii = 8
  72. sheetna = tdata.sheetnames
  73. sheetna2 = tdata2.sheetnames
  74. sheet2 = tdata2[sheetna2[0]]
  75. #这里需要读取每一个表,所以创建循环,当此张表是空表时tablecc变为-1,结束循环
  76. tableii = 0
  77. tablecc = 1
  78. while tablecc == 1:
  79. try:
  80. sheet1 = tdata[sheetna[tableii]]
  81. except:
  82. break
  83. #判断A10是否有数据
  84. tableda = sheet1.cell(row=10, column=1).value
  85. if tableda != 1:
  86. tablecc = -1
  87. else:
  88. #寻找第二个1所在的单元格,确定点数,方便随机数
  89. secondii = 12
  90. secondcc = 1
  91. while secondcc == 1:
  92. tableda2 = sheet1.cell(row=secondii, column=1).value
  93. if tableda2 == 1 or secondii == 80:
  94. if secondii == 80:
  95. secondcc = -1
  96. Count2 = 34
  97. else:
  98. #count1是最终点数,因为random从0开始,所以本来13的数就变成了12
  99. secondcc = -1
  100. Count0 = secondii - 12
  101. Count1 = Count0 / 2
  102. Count2 = int(Count1)
  103. #随机一个数
  104. ranok = -1
  105. while ranok == -1:
  106. ran0 = random.choice(range(Count2))
  107. #获取边长
  108. bcrow0 = ran0 * 2
  109. bcrow1 = bcrow0 + 11
  110. bclen = sheet1.cell(row=bcrow1, column=5).value
  111. if float(bclen) < 2:
  112. ranok = -1
  113. else:
  114. ranok = 1
  115. ran1 = ran0 + 1
  116. #做个判断,判断是否是最后一个数
  117. if ran1 == Count2 + 1 and ran1 != 35:
  118. ran2 = 1
  119. elif ran1 == 35:
  120. ran2 = ran1 + 1
  121. else:
  122. ran2 = ran1 + 1
  123. #第一个单元格需要填入的信息整合下
  124. str1 = 'J' + str(ran1) + '-J' + str(ran2)
  125. #判断下是否超出空白范围
  126. dataend = sheet2.cell(row=writeii,column=1).value
  127. cellborder = Border(left=Side(border_style='thin',color='FF000000'),right=Side(border_style='thin',color='FF000000'),
  128. top=Side(border_style='thin',color='FF000000'),bottom=Side(border_style='thin',color='FF000000'))
  129. alignmentcell=Alignment(horizontal='center',vertical='bottom')
  130. #前三行需要拆分单元格
  131. if dataend != None:
  132. sheet2.insert_rows(writeii,1)
  133. sheet2.cell(row=writeii,column=1).border = cellborder
  134. sheet2.cell(row=writeii,column=2).border = cellborder
  135. sheet2.cell(row=writeii,column=3).border = cellborder
  136. sheet2.cell(row=writeii,column=4).border = cellborder
  137. sheet2.cell(row=writeii,column=5).border = cellborder
  138. sheet2.cell(row=writeii,column=6).border = cellborder
  139. sheet2.cell(row=writeii,column=7).border = cellborder
  140. sheet2.cell(row=writeii,column=8).border = cellborder
  141. sheet2.merge_cells(start_row=writeii, start_column=1, end_row=writeii, end_column=2)
  142. sheet2.merge_cells(start_row=writeii, start_column=3, end_row=writeii, end_column=4)
  143. sheet2.merge_cells(start_row=writeii, start_column=5, end_row=writeii, end_column=6)
  144. sheet2.cell(row=writeii,column=1).alignment = alignmentcell
  145. sheet2.cell(row=writeii,column=3).alignment = alignmentcell
  146. sheet2.cell(row=writeii,column=5).alignment = alignmentcell
  147. sheet2.cell(row=writeii,column=7).alignment = alignmentcell
  148. sheet2.cell(row=writeii,column=8).alignment = alignmentcell
  149. sheet2.cell(row=writeii,column=1).value=str1
  150. sheet2.cell(row=writeii,column=3).value=bclen
  151. #填写编号
  152. bhnum = sheet1.cell(row=3, column=1).value
  153. bhnum1 = bhnum.split('J',1)
  154. qzbhnum = bhnum1[0][-6:]
  155. bhnum2 = "J" + str(bhnum1[1])
  156. sheet2.cell(row=writeii,column=8).value=bhnum2
  157. tableii = tableii + 1
  158. writeii = writeii + 1
  159. tdata2.save(path2)
  160. else:
  161. secondii = secondii + 2
  162. sheet2.cell(row=3,column=7).value=qzbhnum
  163. sheet2.cell(row=writeii,column=1).value= "检测数量:"+ str(tableii) + " 个"
  164. #再把最后三个合回去
  165. sheet2.merge_cells(start_row=writeii, start_column=1, end_row=writeii, end_column=6)
  166. sheet2.merge_cells(start_row=writeii, start_column=7, end_row=writeii, end_column=8)
  167. sheet2.merge_cells(start_row=writeii+1, start_column=1, end_row=writeii+1, end_column=6)
  168. sheet2.merge_cells(start_row=writeii+1, start_column=7, end_row=writeii+1, end_column=8)
  169. sheet2.merge_cells(start_row=writeii+2, start_column=1, end_row=writeii+2, end_column=3)
  170. sheet2.merge_cells(start_row=writeii+2, start_column=4, end_row=writeii+2, end_column=6)
  171. sheet2.merge_cells(start_row=writeii+2, start_column=7, end_row=writeii+2, end_column=8)
  172. tdata2.save(path2)
  173. tdata2.close()
  174. endtime = datetime.datetime.now()
  175. print (str(endtime))
  176. tkinter.messagebox.showinfo(title='结束',message='运行成功!')
  177. window.destroy()
  178. tk.Button(window, text='选择', command=choose1).place(x=350, y=50, anchor='nw')
  179. tk.Button(window, text='选择', command=choose2).place(x=350, y=100, anchor='nw')
  180. tk.Button(window,text='确认',command=main).place(x=120,y=150,anchor='nw')
  181. tk.Button(window,text='取消',command=tuichu).place(x=230,y=150,anchor='nw')
  182. noticemes = tk.Label(window,text='请务必删除中间已填写的内容,再运行!',fg="red",font=('微软雅黑',12),width=35,height=2)
  183. noticemes.place(x=10,y=180,anchor='nw')
  184. noticemes = tk.Label(window,text='请等待弹出 运行成功 窗口再关闭程序!',fg="red",font=('微软雅黑',12),width=35,height=2)
  185. noticemes.place(x=10,y=220,anchor='nw')
  186. window.mainloop()
  187. if __name__ == '__main__':
  188. # main(r"D:\1work_now\20210819\新建文件夹\大坪子村大坪子组界址点成果表.xlsx",r"D:\1work_now\20210819\新建文件夹\2 相对位置精度检测表.xlsx")
  189. start()