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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. import openpyxl
  2. import sqlite3
  3. import os
  4. import time
  5. from openpyxl.styles import Alignment, NamedStyle
  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. resultlist.append(data1[6])
  22. resultlist.append(data1[7])
  23. resultlist.append(data1[8])
  24. resultlist.append(data1[9])
  25. resultlist.append(data1[10])
  26. resultlist.append(data1[11])
  27. # 判定1
  28. an1 = data1[12].decode('utf-8')
  29. resultlist.append(an1)
  30. resultlist.append(data1[13])
  31. resultlist.append(data1[14])
  32. resultlist.append(data1[15])
  33. # 判定2
  34. an2 = data1[16].decode('utf-8')
  35. resultlist.append(an2)
  36. # 3个名字(首,上,新)
  37. name1 = data1[17].decode('utf-8')
  38. resultlist.append(name1)
  39. name2 = data1[18].decode('utf-8')
  40. resultlist.append(name2)
  41. name3 = data1[19].decode('utf-8')
  42. resultlist.append(name3)
  43. list2.append(resultlist)
  44. return list2
  45. def openpyxl_write(file_name, dbpath, filename):
  46. utf_en = filename.encode('utf-8')
  47. # 新建对应的excel
  48. wb = openpyxl.Workbook()
  49. ws1 = wb.create_sheet('稳定性分析成果表')
  50. ws2 = wb.create_sheet('改算模型')
  51. ws3 = wb['Sheet']
  52. wb.remove(ws3)
  53. # ws1部分(成果表)
  54. # 提取数据
  55. db1 = sqlite3.connect(dbpath)
  56. # 获取游标
  57. cursor1 = db1.cursor()
  58. sqlstr1 = 'select PointName,First_X,First_Y,Last_X,Last_Y,Last_Wight,Result_X,Result_Y,New_Wight,New_FirstX,New_FirstY,New_FirstP,NFDis_Ass,New_LastX,New_LastY,New_LastP,NLDis_Ass,First_ResultName,Last_ResultName,New_ResultName from WD_Result_Point WHERE TableName = ?'
  59. cursor1.execute(sqlstr1, (utf_en,))
  60. # 获取结果集
  61. result1 = cursor1.fetchall()
  62. # 整理数据
  63. plist1 = Arrange_Data1(result1)
  64. ws1.column_dimensions['B'].width = 15
  65. ws1.column_dimensions['C'].width = 15
  66. ws1.column_dimensions['D'].width = 15
  67. ws1.column_dimensions['E'].width = 15
  68. ws1.column_dimensions['F'].width = 5
  69. ws1.column_dimensions['G'].width = 15
  70. ws1.column_dimensions['H'].width = 15
  71. ws1.column_dimensions['I'].width = 5
  72. ws1.column_dimensions['M'].width = 5
  73. ws1.column_dimensions['Q'].width = 5
  74. ws1.column_dimensions['J'].width = 8
  75. ws1.column_dimensions['K'].width = 8
  76. ws1.column_dimensions['L'].width = 8
  77. ws1.column_dimensions['N'].width = 8
  78. ws1.column_dimensions['O'].width = 8
  79. ws1.column_dimensions['P'].width = 8
  80. ws1.merge_cells(start_row=1, end_row=1,
  81. start_column=1, end_column=17)
  82. ws1.cell(1, 1).value = '稳定性分析成果表'
  83. ws_area = ws1["A1:Q2"]
  84. alignment_center = Alignment(horizontal='center', vertical='center') # 指定区域单元格居中
  85. for i in ws_area:
  86. for j in i:
  87. j.alignment = alignment_center
  88. alignment_right = Alignment(horizontal='right', vertical='center')
  89. ws1.merge_cells(start_row=2, end_row=3,
  90. start_column=1, end_column=1)
  91. ws1.cell(2, 1).value = '点号'
  92. ws1.merge_cells(start_row=2, end_row=2,
  93. start_column=2, end_column=3)
  94. ws1.cell(2, 2).value = plist1[0][17]
  95. ws1.merge_cells(start_row=2, end_row=2,
  96. start_column=4, end_column=6)
  97. ws1.cell(2, 4).value = plist1[0][18]
  98. ws1.merge_cells(start_row=2, end_row=2,
  99. start_column=7, end_column=9)
  100. ws1.cell(2, 7).value = plist1[0][19]
  101. ws1.merge_cells(start_row=2, end_row=2,
  102. start_column=10, end_column=12)
  103. ws1.cell(2, 10).value = '本期-首期(mm)'
  104. ws1.merge_cells(start_row=2, end_row=3,
  105. start_column=13, end_column=13)
  106. ws1.cell(2, 13).value = '变形判定'
  107. ws1.merge_cells(start_row=2, end_row=2,
  108. start_column=14, end_column=16)
  109. ws1.cell(2, 14).value = '本期-上期(mm)'
  110. ws1.merge_cells(start_row=2, end_row=3,
  111. start_column=17, end_column=17)
  112. ws1.cell(2, 17).value = '变形判定'
  113. ws1.cell(2, 13).alignment = Alignment(wrap_text=True)
  114. ws1.cell(2, 17).alignment = Alignment(wrap_text=True)
  115. ws1.cell(3, 2).value = 'X(m)'
  116. ws1.cell(3, 3).value = 'Y(m)'
  117. ws1.cell(3, 4).value = 'X(m)'
  118. ws1.cell(3, 5).value = 'Y(m)'
  119. ws1.cell(3, 6).value = '权'
  120. ws1.cell(3, 7).value = 'X(m)'
  121. ws1.cell(3, 8).value = 'Y(m)'
  122. ws1.cell(3, 9).value = '权'
  123. ws1.cell(3, 10).value = '△X'
  124. ws1.cell(3, 11).value = '△Y'
  125. ws1.cell(3, 12).value = '△XY'
  126. ws1.cell(3, 14).value = '△X'
  127. ws1.cell(3, 15).value = '△Y'
  128. ws1.cell(3, 16).value = '△XY'
  129. row1 = 4
  130. for data1 in plist1:
  131. ws1.cell(row1, 1).value = data1[0]
  132. ws1.cell(row1, 2).value = round(data1[1], 4)
  133. ws1.cell(row1, 3).value = round(data1[2], 4)
  134. ws1.cell(row1, 4).value = round(data1[3], 4)
  135. ws1.cell(row1, 5).value = round(data1[4], 4)
  136. ws1.cell(row1, 6).value = int(data1[5])
  137. ws1.cell(row1, 7).value = round(data1[6], 4)
  138. ws1.cell(row1, 8).value = round(data1[7], 4)
  139. ws1.cell(row1, 9).value = int(data1[8])
  140. ws1.cell(row1, 10).value = round(data1[9], 1)
  141. ws1.cell(row1, 11).value = round(data1[10], 1)
  142. ws1.cell(row1, 12).value = round(data1[11], 1)
  143. if data1[12] == '稳定':
  144. ws1.cell(row1, 13).value = ''
  145. else:
  146. ws1.cell(row1, 13).value = data1[12]
  147. ws1.cell(row1, 14).value = round(data1[13], 1)
  148. ws1.cell(row1, 15).value = round(data1[14], 1)
  149. ws1.cell(row1, 16).value = round(data1[15], 1)
  150. if data1[16] == '稳定':
  151. ws1.cell(row1, 17).value = ''
  152. else:
  153. ws1.cell(row1, 17).value = data1[16]
  154. row1 = row1 + 1
  155. # ws2部分(公式)
  156. # 提取数据
  157. sqlstr2 = 'select Last_ResultName,New_ResultName,Formula_X1,Formula_X2,Formula_X3,Formula_Y1,Formula_Y2,Formula_Y3 from WD_Result_Param WHERE TableName = ?'
  158. cursor1.execute(sqlstr2, (utf_en,))
  159. # 获取结果集
  160. result3 = cursor1.fetchall()
  161. newname = result3[0][1].decode('utf-8')
  162. lastname = result3[0][0].decode('utf-8')
  163. ws2.column_dimensions['A'].width = 75
  164. ws_area = ws2["A1:A5"]
  165. alignment_center = Alignment(horizontal='left', vertical='center') # 指定区域单元格居中
  166. for i in ws_area:
  167. for j in i:
  168. j.alignment = alignment_center
  169. str1 = newname + '--' + lastname + '已知系统转换公式:'
  170. ws2.cell(1, 1).value = str1
  171. str2 = 'X=(' + str(round(result3[0][2], 14)) + ')·x+(' + str(round(result3[0][3], 14)) + ')·y+(' + str(
  172. round(result3[0][4], 11)) + ')'
  173. ws2.cell(2, 1).value = str2
  174. str3 = 'Y=(' + str(round(result3[0][5], 14)) + ')·x+(' + str(round(result3[0][6], 14)) + ')·y+(' + str(
  175. round(result3[0][7], 11)) + ')'
  176. ws2.cell(3, 1).value = str3
  177. str4 = '式中:x、y为' + newname
  178. ws2.cell(4, 1).value = str4
  179. str5 = ' X、Y为' + lastname + '已知系统的' + newname + '归算坐标'
  180. ws2.cell(5, 1).value = str5
  181. # 获取当前时间并格式化为字符串,例如:20231010_143000
  182. timestamp = time.strftime("%Y%m%d", time.localtime())
  183. # 保存 Excel 文件
  184. excel_filename = f"{os.path.splitext(filename)[0]}-成果数据-{timestamp}.xlsx"
  185. excel_filepath = os.path.join(file_name, excel_filename)
  186. wb.save(excel_filepath)
  187. def export_initial_data(ui, db_path, utf_en, export_folder):
  188. # 获取当前时间并格式化为字符串,例如:20231010_143000
  189. timestamp = time.strftime("%Y%m%d", time.localtime())
  190. # 解码文件名并去掉后缀名
  191. decoded_utf_en = utf_en.decode('utf-8') if isinstance(utf_en, bytes) else utf_en
  192. excel_file_name = f"{os.path.splitext(decoded_utf_en)[0]}-初始数据-{timestamp}.xlsx"
  193. excel_path = os.path.join(export_folder, excel_file_name)
  194. # 创建一个新的工作簿和工作表
  195. wb = openpyxl.Workbook()
  196. ws = wb.active
  197. # 连接到数据库
  198. conn = sqlite3.connect(db_path)
  199. cursor = conn.cursor()
  200. # 查询WD_Input_Param表中的数据
  201. query = """
  202. SELECT New_ResultName, Last_ResultName, Avg_SL, Ms_Dir, SL_Count, Dir_Count, Scale_Value, First_ResultName
  203. FROM WD_Input_Param
  204. WHERE TableName = ?
  205. """
  206. cursor.execute(query, (utf_en,))
  207. result = cursor.fetchone()
  208. # 创建样式来保留指定的小数位数
  209. decimal_style_3 = NamedStyle(name="decimal_style_3")
  210. decimal_style_3.number_format = '0.0000'
  211. decimal_style_3.alignment = Alignment(horizontal='center', vertical='center')
  212. decimal_style_1 = NamedStyle(name="decimal_style_1")
  213. decimal_style_1.number_format = '0.0'
  214. decimal_style_1.alignment = Alignment(horizontal='center', vertical='center')
  215. decimal_style_4 = NamedStyle(name="decimal_style_4")
  216. decimal_style_4.number_format = '0'
  217. decimal_style_4.alignment = Alignment(horizontal='center', vertical='center')
  218. if result:
  219. new_result_name, last_result_name, avg_sl, ms_dir, sl_count, dir_count, scale_value, first_result_name = result
  220. # 填充数据到Excel并应用样式
  221. ws['B1'] = new_result_name
  222. ws['B1'].alignment = Alignment(horizontal='center', vertical='center')
  223. ws['D1'] = last_result_name
  224. ws['D1'].alignment = Alignment(horizontal='center', vertical='center')
  225. ws['G1'] = first_result_name # 新增:填入First_ResultName
  226. ws['G1'].alignment = Alignment(horizontal='center', vertical='center') # 新增:设置居中对齐
  227. ws['J1'] = avg_sl
  228. ws['J1'].style = decimal_style_3
  229. ws['J2'] = ms_dir
  230. ws['J2'].alignment = Alignment(horizontal='center', vertical='center')
  231. ws['J3'] = sl_count
  232. ws['J3'].style = decimal_style_4
  233. ws['J4'] = dir_count
  234. ws['J4'].style = decimal_style_4
  235. ws['J5'] = scale_value
  236. ws['J5'].style = decimal_style_4
  237. # 合并单元格
  238. ws.merge_cells('B1:C1')
  239. ws.merge_cells('D1:E1')
  240. ws.merge_cells('G1:H1')
  241. # 设置列宽
  242. ws.column_dimensions['B'].width = 12.5
  243. ws.column_dimensions['C'].width = 12.5
  244. ws.column_dimensions['D'].width = 12.5
  245. ws.column_dimensions['E'].width = 12.5
  246. ws.column_dimensions['F'].width = 3
  247. ws.column_dimensions['F'].alignment = Alignment(horizontal='center', vertical='center') # 新增:设置F列居中对齐
  248. ws.column_dimensions['G'].width = 12.5
  249. ws.column_dimensions['H'].width = 12.5
  250. ws.column_dimensions['I'].width = 14
  251. ws.column_dimensions['J'].width = 10
  252. # 设置表头
  253. headers = [
  254. ("A2", "点名"),
  255. ("B2", "高斯坐标x(m)"),
  256. ("C2", "高斯坐标y(m)"),
  257. ("D2", "高斯坐标x(m)"),
  258. ("E2", "高斯坐标y(m)"),
  259. ("F2", "权"),
  260. ("G2", "高斯坐标x(m)"),
  261. ("H2", "高斯坐标y(m)"),
  262. ("I1", "平均边长"),
  263. ("I2", "方向值中误差"),
  264. ("I3", "总边数"),
  265. ("I4", "总方向数"),
  266. ("I5", "缩放值")
  267. ]
  268. for cell, value in headers:
  269. ws[cell] = value
  270. ws[cell].alignment = Alignment(horizontal='center', vertical='center')
  271. # 查询WD_Input_Point表中的数据
  272. query_point = """
  273. SELECT PointName, New_X, New_Y, Last_X, Last_Y, Wight, First_X, First_Y
  274. FROM WD_Input_Point
  275. WHERE TableName = ?
  276. """
  277. cursor.execute(query_point, (utf_en,))
  278. results_point = cursor.fetchall()
  279. # 创建一个样式来强制保留四位小数
  280. decimal_style = NamedStyle(name="decimal_style")
  281. decimal_style.number_format = '0000.0000'
  282. # 填充数据到Excel
  283. for idx, (point_name, new_x, new_y, last_x, last_y, wight, first_x, first_y) in enumerate(results_point, start=3):
  284. ws[f'A{idx}'] = point_name
  285. ws[f'B{idx}'] = round(new_x, 4)
  286. ws[f'C{idx}'] = round(new_y, 4)
  287. ws[f'D{idx}'] = round(last_x, 4)
  288. ws[f'E{idx}'] = round(last_y, 4)
  289. ws[f'F{idx}'] = round(wight, 0) # 新增
  290. ws[f'G{idx}'] = round(first_x, 4) # 新增
  291. ws[f'H{idx}'] = round(first_y, 4) # 新增
  292. # 应用样式以保留四位小数
  293. ws[f'B{idx}'].style = decimal_style
  294. ws[f'C{idx}'].style = decimal_style
  295. ws[f'D{idx}'].style = decimal_style
  296. ws[f'E{idx}'].style = decimal_style
  297. ws[f'G{idx}'].style = decimal_style # 新增
  298. ws[f'H{idx}'].style = decimal_style # 新增
  299. # 保存工作簿
  300. wb.save(excel_path)
  301. def export_example_data(ui, db_path, utf_en, export_folder):
  302. # 解码文件名并去掉后缀名
  303. decoded_utf_en = utf_en.decode('utf-8') if isinstance(utf_en, bytes) else utf_en
  304. excel_file_name = f"{os.path.splitext(decoded_utf_en)[0]}.xlsx"
  305. excel_path = os.path.join(export_folder, excel_file_name)
  306. # 创建一个新的工作簿和工作表
  307. wb = openpyxl.Workbook()
  308. ws = wb.active
  309. # 连接到数据库
  310. conn = sqlite3.connect(db_path)
  311. cursor = conn.cursor()
  312. # 查询WD_Input_Param表中的数据
  313. query = """
  314. SELECT New_ResultName, Last_ResultName, Avg_SL, Ms_Dir, SL_Count, Dir_Count, Scale_Value, First_ResultName
  315. FROM WD_Input_Param
  316. WHERE TableName = ?
  317. """
  318. cursor.execute(query, (utf_en,))
  319. result = cursor.fetchone()
  320. # 创建样式来保留指定的小数位数
  321. decimal_style_3 = NamedStyle(name="decimal_style_3")
  322. decimal_style_3.number_format = '0.0000'
  323. decimal_style_3.alignment = Alignment(horizontal='center', vertical='center')
  324. decimal_style_1 = NamedStyle(name="decimal_style_1")
  325. decimal_style_1.number_format = '0.0'
  326. decimal_style_1.alignment = Alignment(horizontal='center', vertical='center')
  327. decimal_style_4 = NamedStyle(name="decimal_style_4")
  328. decimal_style_4.number_format = '0'
  329. decimal_style_4.alignment = Alignment(horizontal='center', vertical='center')
  330. if result:
  331. new_result_name, last_result_name, avg_sl, ms_dir, sl_count, dir_count, scale_value, first_result_name = result
  332. # 填充数据到Excel并应用样式
  333. ws['B1'] = new_result_name
  334. ws['B1'].alignment = Alignment(horizontal='center', vertical='center')
  335. ws['D1'] = last_result_name
  336. ws['D1'].alignment = Alignment(horizontal='center', vertical='center')
  337. ws['G1'] = first_result_name # 新增:填入First_ResultName
  338. ws['G1'].alignment = Alignment(horizontal='center', vertical='center') # 新增:设置居中对齐
  339. ws['J1'] = avg_sl
  340. ws['J1'].style = decimal_style_3
  341. ws['J2'] = ms_dir
  342. ws['J2'].alignment = Alignment(horizontal='center', vertical='center')
  343. ws['J3'] = sl_count
  344. ws['J3'].style = decimal_style_4
  345. ws['J4'] = dir_count
  346. ws['J4'].style = decimal_style_4
  347. ws['J5'] = scale_value
  348. ws['J5'].style = decimal_style_4
  349. # 合并单元格
  350. ws.merge_cells('B1:C1')
  351. ws.merge_cells('D1:E1')
  352. ws.merge_cells('G1:H1')
  353. # 设置列宽
  354. ws.column_dimensions['B'].width = 12.5
  355. ws.column_dimensions['C'].width = 12.5
  356. ws.column_dimensions['D'].width = 12.5
  357. ws.column_dimensions['E'].width = 12.5
  358. ws.column_dimensions['F'].width = 3
  359. ws.column_dimensions['F'].alignment = Alignment(horizontal='center', vertical='center') # 新增:设置F列居中对齐
  360. ws.column_dimensions['G'].width = 12.5
  361. ws.column_dimensions['H'].width = 12.5
  362. ws.column_dimensions['I'].width = 14
  363. ws.column_dimensions['J'].width = 10
  364. # 设置表头
  365. headers = [
  366. ("A2", "点名"),
  367. ("B2", "高斯坐标x(m)"),
  368. ("C2", "高斯坐标y(m)"),
  369. ("D2", "高斯坐标x(m)"),
  370. ("E2", "高斯坐标y(m)"),
  371. ("F2", "权"),
  372. ("G2", "高斯坐标x(m)"),
  373. ("H2", "高斯坐标y(m)"),
  374. ("I1", "平均边长"),
  375. ("I2", "方向值中误差"),
  376. ("I3", "总边数"),
  377. ("I4", "总方向数"),
  378. ("I5", "缩放值")
  379. ]
  380. for cell, value in headers:
  381. ws[cell] = value
  382. ws[cell].alignment = Alignment(horizontal='center', vertical='center')
  383. # 查询WD_Input_Point表中的数据
  384. query_point = """
  385. SELECT PointName, New_X, New_Y, Last_X, Last_Y, Wight, First_X, First_Y
  386. FROM WD_Input_Point
  387. WHERE TableName = ?
  388. """
  389. cursor.execute(query_point, (utf_en,))
  390. results_point = cursor.fetchall()
  391. # 创建一个样式来强制保留四位小数
  392. decimal_style = NamedStyle(name="decimal_style")
  393. decimal_style.number_format = '0000.0000'
  394. # 填充数据到Excel
  395. for idx, (point_name, new_x, new_y, last_x, last_y, wight, first_x, first_y) in enumerate(results_point, start=3):
  396. ws[f'A{idx}'] = point_name
  397. ws[f'B{idx}'] = round(new_x, 4)
  398. ws[f'C{idx}'] = round(new_y, 4)
  399. ws[f'D{idx}'] = round(last_x, 4)
  400. ws[f'E{idx}'] = round(last_y, 4)
  401. ws[f'F{idx}'] = round(wight, 0) # 新增
  402. ws[f'G{idx}'] = round(first_x, 4) # 新增
  403. ws[f'H{idx}'] = round(first_y, 4) # 新增
  404. # 应用样式以保留四位小数
  405. ws[f'B{idx}'].style = decimal_style
  406. ws[f'C{idx}'].style = decimal_style
  407. ws[f'D{idx}'].style = decimal_style
  408. ws[f'E{idx}'].style = decimal_style
  409. ws[f'G{idx}'].style = decimal_style # 新增
  410. ws[f'H{idx}'].style = decimal_style # 新增
  411. # 保存工作簿
  412. wb.save(excel_path)
  413. # 主函数 写入excel文件
  414. def main_function(ui, dbpath, excelname):
  415. # 获取应用的安装目录
  416. app_install_dir = os.path.dirname(os.path.abspath(__file__)) # 假设脚本文件位于应用的安装目录下
  417. export_folder = os.path.join(app_install_dir, 'Export')
  418. # 如果 Export 文件夹不存在,则创建它
  419. if not os.path.exists(export_folder):
  420. os.makedirs(export_folder)
  421. try:
  422. openpyxl_write(export_folder, dbpath, excelname)
  423. QMessageBox.information(ui, '成功', f'成果文件已成功导出到 {export_folder}')
  424. except Exception as e:
  425. QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
  426. def main_function_initial(ui, dbpath, excelname_utf8):
  427. # 获取应用的安装目录
  428. app_install_dir = os.path.dirname(os.path.abspath(__file__)) # 假设脚本文件位于应用的安装目录下
  429. export_folder = os.path.join(app_install_dir, 'Export')
  430. # 如果 Export 文件夹不存在,则创建它
  431. if not os.path.exists(export_folder):
  432. os.makedirs(export_folder)
  433. try:
  434. export_initial_data(ui, dbpath, excelname_utf8, export_folder)
  435. QMessageBox.information(ui, '成功', f'初始文件已成功导出到 {export_folder}')
  436. except PermissionError as e:
  437. if e.errno == 13:
  438. QMessageBox.critical(ui, '错误', '请确认文件没有被其他程序(如Excel、文本编辑器等)打开')
  439. else:
  440. QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
  441. except Exception as e:
  442. QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
  443. def main_function_example(ui, dbpath, excelname_utf8):
  444. # 获取应用的安装目录
  445. app_install_dir = os.path.dirname(os.path.abspath(__file__)) # 假设脚本文件位于应用的安装目录下
  446. export_folder = os.path.join(app_install_dir, 'Example')
  447. # 如果 Export 文件夹不存在,则创建它
  448. if not os.path.exists(export_folder):
  449. os.makedirs(export_folder)
  450. try:
  451. export_example_data(ui, dbpath, excelname_utf8, export_folder)
  452. QMessageBox.information(ui, '成功', f'示例文件已成功导出到 {export_folder}')
  453. except PermissionError as e:
  454. if e.errno == 13:
  455. QMessageBox.critical(ui, '错误', '请确认文件没有被其他程序(如Excel、文本编辑器等)打开')
  456. else:
  457. QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
  458. except Exception as e:
  459. QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')