控制网复测平面基准归算程序(包含控制网复测平面基准计算,平面控制网稳定性计算,水准测段高差稳定计算三个程序功能)
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

GSExport.py 9.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. import openpyxl
  2. import sqlite3
  3. import os
  4. import time
  5. from openpyxl.styles import Alignment
  6. from PySide6.QtWidgets import QMessageBox
  7. def Arrange_Data1(list1):
  8. # 最终return的
  9. list2 = []
  10. for data1 in list1:
  11. # 点名
  12. # 存每一行的数据
  13. resultlist = []
  14. pn = data1[0].decode('utf-8')
  15. resultlist.append(pn)
  16. resultlist.append(data1[1])
  17. resultlist.append(data1[2])
  18. resultlist.append(data1[3])
  19. resultlist.append(data1[4])
  20. resultlist.append(data1[5])
  21. # 判定
  22. an1 = data1[6].decode('utf-8')
  23. resultlist.append(an1)
  24. # 两个结果名字(旧新)
  25. name1 = data1[7].decode('utf-8')
  26. resultlist.append(name1)
  27. name2 = data1[8].decode('utf-8')
  28. resultlist.append(name2)
  29. list2.append(resultlist)
  30. return list2
  31. # 复测成果表
  32. def Arrange_Data2(list1):
  33. # 最终return的
  34. list2 = []
  35. for data1 in list1:
  36. # 点名
  37. # 存每一行的数据
  38. resultlist = []
  39. pn = data1[0].decode('utf-8')
  40. resultlist.append(pn)
  41. resultlist.append(data1[1])
  42. resultlist.append(data1[2])
  43. resultlist.append(data1[3])
  44. resultlist.append(data1[4])
  45. resultlist.append(data1[5])
  46. resultlist.append(data1[6])
  47. resultlist.append(data1[7])
  48. # 判定
  49. an1 = data1[8].decode('utf-8')
  50. resultlist.append(an1)
  51. # 两个结果名字(旧新)
  52. name1 = data1[9].decode('utf-8')
  53. resultlist.append(name1)
  54. name2 = data1[10].decode('utf-8')
  55. resultlist.append(name2)
  56. list2.append(resultlist)
  57. return list2
  58. def openpyxl_write(file_name, dbpath, filename):
  59. utf_en = filename.encode('utf-8')
  60. # 新建对应的excel
  61. wb = openpyxl.Workbook()
  62. ws2 = wb.create_sheet('复测成果表')
  63. ws1 = wb.create_sheet('复测基准归算表')
  64. ws3 = wb.create_sheet('基准归算模型')
  65. ws5 = wb['Sheet']
  66. wb.remove(ws5)
  67. # w1部分(基准归算表)
  68. # 提取数据
  69. db = sqlite3.connect(dbpath)
  70. cursor1 = db.cursor()
  71. sqlstr11 = 'select PointName,Cal_X,Cal_Y,Last_CalX,Last_CalY,Last_CalP,Dis_Ass,Last_ResultName,New_ResultName from GS_Result_Point WHERE TableName = ?'
  72. cursor1.execute(sqlstr11, (utf_en,))
  73. # 获取结果集
  74. result1 = cursor1.fetchall()
  75. # 整理数据
  76. plist1 = Arrange_Data1(result1)
  77. ws1.column_dimensions['A'].width = 5
  78. ws1.column_dimensions['B'].width = 15
  79. ws1.column_dimensions['C'].width = 15
  80. ws1.column_dimensions['D'].width = 8
  81. ws1.column_dimensions['E'].width = 8
  82. ws1.column_dimensions['F'].width = 8
  83. ws1.column_dimensions['G'].width = 5
  84. ws1.merge_cells(start_row=1, end_row=1,
  85. start_column=1, end_column=7)
  86. ws1.cell(1, 1).value = '复测基准归算与位移判定'
  87. ws1.merge_cells(start_row=2, end_row=3,
  88. start_column=1, end_column=1)
  89. ws1.cell(2, 1).value = '点名'
  90. ws1.merge_cells(start_row=2, end_row=2,
  91. start_column=2, end_column=3)
  92. ws1.cell(2, 2).value = plist1[0][8] + '基准归算成果'
  93. ws1.merge_cells(start_row=2, end_row=2,
  94. start_column=4, end_column=6)
  95. ws1.cell(2, 4).value = plist1[0][7] + '-归算成果(mm)'
  96. ws_area = ws1["A1:H3"]
  97. alignment_center = Alignment(horizontal='center', vertical='center') # 指定区域单元格居中
  98. for i in ws_area:
  99. for j in i:
  100. j.alignment = alignment_center
  101. alignment_right = Alignment(horizontal='right', vertical='center')
  102. ws1.merge_cells(start_row=2, end_row=3,
  103. start_column=7, end_column=7)
  104. ws1.cell(2, 7).value = '位移判定'
  105. ws1.cell(2, 7).alignment = Alignment(wrap_text=True)
  106. ws1.cell(3, 2).value = 'X(mm)'
  107. ws1.cell(3, 3).value = 'Y(mm)'
  108. ws1.cell(3, 4).value = '△X'
  109. ws1.cell(3, 5).value = '△Y'
  110. ws1.cell(3, 6).value = '△P'
  111. row1 = 4
  112. for data1 in plist1:
  113. ws1.cell(row1, 1).value = data1[0]
  114. ws1.cell(row1, 2).value = round(data1[1], 4)
  115. ws1.cell(row1, 3).value = round(data1[2], 4)
  116. ws1.cell(row1, 4).value = round(data1[3], 1)
  117. ws1.cell(row1, 5).value = round(data1[4], 1)
  118. ws1.cell(row1, 6).value = round(data1[5], 1)
  119. if data1[6] == '稳定':
  120. ws1.cell(row1, 7).value = ''
  121. else:
  122. ws1.cell(row1, 7).value = data1[6]
  123. row1 = row1 + 1
  124. # ws2部分(复测成果表)
  125. # 提取数据
  126. sqlstr1 = 'select PointName,Last_X,Last_Y,Result_X,Result_Y,Last_ResultX,Last_ResultY,Last_ResultP,Dis_Ass,Last_ResultName,New_ResultName from GS_Result_Point WHERE TableName = ?'
  127. cursor1.execute(sqlstr1, (utf_en,))
  128. # 获取结果集
  129. result2 = cursor1.fetchall()
  130. # 整理数据
  131. plist2 = Arrange_Data2(result2)
  132. ws2.column_dimensions['A'].width = 5
  133. ws2.column_dimensions['B'].width = 15
  134. ws2.column_dimensions['C'].width = 15
  135. ws2.column_dimensions['D'].width = 15
  136. ws2.column_dimensions['E'].width = 15
  137. ws2.column_dimensions['F'].width = 8
  138. ws2.column_dimensions['G'].width = 8
  139. ws2.column_dimensions['H'].width = 8
  140. ws2.column_dimensions['I'].width = 5
  141. ws2.merge_cells(start_row=1, end_row=1,
  142. start_column=1, end_column=3)
  143. ws2.cell(1, 1).value = '前期成果'
  144. ws2.merge_cells(start_row=1, end_row=1,
  145. start_column=4, end_column=9)
  146. ws2.cell(1, 4).value = '本期成果'
  147. ws_area = ws2["A1:I2"]
  148. alignment_center = Alignment(horizontal='center', vertical='center') # 指定区域单元格居中
  149. for i in ws_area:
  150. for j in i:
  151. j.alignment = alignment_center
  152. alignment_right = Alignment(horizontal='right', vertical='center')
  153. ws2.merge_cells(start_row=2, end_row=3,
  154. start_column=1, end_column=1)
  155. ws2.cell(2, 1).value = '点名'
  156. ws2.merge_cells(start_row=2, end_row=2,
  157. start_column=2, end_column=3)
  158. ws2.cell(2, 2).value = plist2[0][9]
  159. ws2.merge_cells(start_row=2, end_row=2,
  160. start_column=4, end_column=5)
  161. ws2.cell(2, 4).value = plist2[0][10]
  162. ws2.merge_cells(start_row=2, end_row=2,
  163. start_column=6, end_column=8)
  164. newname_1 = plist2[0][9] + '-' + plist2[0][10] + '(mm)'
  165. ws2.cell(2, 6).value = newname_1
  166. ws2.merge_cells(start_row=2, end_row=3,
  167. start_column=9, end_column=9)
  168. ws2.cell(2, 9).value = '位移判定'
  169. ws2.cell(2, 9).alignment = Alignment(wrap_text=True)
  170. ws2.cell(3, 2).value = 'X(m)'
  171. ws2.cell(3, 3).value = 'Y(m)'
  172. ws2.cell(3, 4).value = 'X(m)'
  173. ws2.cell(3, 5).value = 'Y(m)'
  174. ws2.cell(3, 6).value = '△X'
  175. ws2.cell(3, 7).value = '△Y'
  176. ws2.cell(3, 8).value = '△XY'
  177. row2 = 4
  178. for data2 in plist2:
  179. ws2.cell(row2, 1).value = data2[0]
  180. ws2.cell(row2, 2).value = round(data2[1], 4)
  181. ws2.cell(row2, 3).value = round(data2[2], 4)
  182. ws2.cell(row2, 4).value = round(data2[3], 4)
  183. ws2.cell(row2, 5).value = round(data2[4], 4)
  184. ws2.cell(row2, 6).value = round(data2[5], 1)
  185. ws2.cell(row2, 7).value = round(data2[6], 1)
  186. ws2.cell(row2, 8).value = round(data2[7], 1)
  187. if data2[8] == '稳定':
  188. ws2.cell(row2, 9).value = ''
  189. else:
  190. ws2.cell(row2, 9).value = data2[8]
  191. row2 = row2 + 1
  192. # ws3部分(公式)
  193. # 提取数据
  194. sqlstr2 = 'select Last_ResultName,New_ResultName,Formula_X1,Formula_X2,Formula_X3,Formula_Y1,Formula_Y2,Formula_Y3 from GS_Trans_Param WHERE TableName = ?'
  195. cursor1.execute(sqlstr2, (utf_en,))
  196. # 获取结果集
  197. result3 = cursor1.fetchall()
  198. newname = result3[0][1].decode('utf-8')
  199. lastname = result3[0][0].decode('utf-8')
  200. ws3.column_dimensions['A'].width = 75
  201. ws_area = ws3["A1:A5"]
  202. alignment_center = Alignment(horizontal='left', vertical='center') # 指定区域单元格居中
  203. for i in ws_area:
  204. for j in i:
  205. j.alignment = alignment_center
  206. str1 = newname + '--' + lastname + '已知系统转换公式:'
  207. ws3.cell(1, 1).value = str1
  208. str2 = 'X=(' + str(round(result3[0][2], 14)) + ')·x+(' + str(round(result3[0][3], 14)) + ')·y+(' + str(
  209. round(result3[0][4], 11)) + ')'
  210. ws3.cell(2, 1).value = str2
  211. str3 = 'Y=(' + str(round(result3[0][5], 14)) + ')·x+(' + str(round(result3[0][6], 14)) + ')·y+(' + str(
  212. round(result3[0][7], 11)) + ')'
  213. ws3.cell(3, 1).value = str3
  214. str4 = '式中:x、y为' + newname
  215. ws3.cell(4, 1).value = str4
  216. str5 = ' X、Y为' + lastname + '已知系统的' + newname + '归算坐标'
  217. ws3.cell(5, 1).value = str5
  218. # 保存
  219. # wb.save(outpath)
  220. # 保存 Excel 文件
  221. excel_filename = f"控制网复测平面基准计算成果表{time.strftime('%Y%m%d_%H%M%S')}.xlsx"
  222. excel_filepath = os.path.join(file_name, excel_filename)
  223. wb.save(excel_filepath)
  224. # 主函数 写入excel文件
  225. def main_function(ui, file_path, dbpath, excelname):
  226. # dbpath = r"D:\4work_now\20240819GS\ControlNetwork\ControlNetwork\UI\SQL\DataBase.db"
  227. # outpath = r'D:\4work_now\20240819GS\JPG\GS成果表.xlsx'
  228. # file_path = r'D:\4work_now\20240819GS\二滩_20240816.xls'
  229. file_name = os.path.dirname(file_path)
  230. try:
  231. openpyxl_write(file_name, dbpath, excelname)
  232. QMessageBox.information(ui, '成功', f'成果文件已成功导出到 {file_name}')
  233. except Exception as e:
  234. QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')