Browse Source

完成了GC示例文件的下载

wzp 5 months ago
parent
commit
5c4af658ca
4 changed files with 168 additions and 6 deletions
  1. 7
    3
      Back/GC/GC.py
  2. 142
    0
      Back/GC/GCExport.py
  3. 14
    0
      Front/main.py
  4. 5
    3
      Front/modules/ui_main.py

+ 7
- 3
Back/GC/GC.py View File

210
     finally:
210
     finally:
211
         conn.close()
211
         conn.close()
212
 
212
 
213
+
213
 # 读取指定单元格的数据(编辑)
214
 # 读取指定单元格的数据(编辑)
214
 def read_cells_from_excel1(list1):
215
 def read_cells_from_excel1(list1):
215
     cell_values = {}
216
     cell_values = {}
218
     cell_values['I1'] = list1[0][6]
219
     cell_values['I1'] = list1[0][6]
219
     return cell_values
220
     return cell_values
220
 
221
 
221
-#获取最后一行有数字的单元格值(编辑)
222
-def get_last_numeric_cell_value1(list1,index):
222
+
223
+# 获取最后一行有数字的单元格值(编辑)
224
+def get_last_numeric_cell_value1(list1, index):
223
     ii = 0
225
     ii = 0
224
     while ii < len(list1):
226
     while ii < len(list1):
225
         if list1[ii][index] == '' or list1[ii][index] == ' ' or list1[ii][index] == None:
227
         if list1[ii][index] == '' or list1[ii][index] == ' ' or list1[ii][index] == None:
229
             ii = ii + 1
231
             ii = ii + 1
230
     return ii
232
     return ii
231
 
233
 
234
+
232
 # 计算指定列中数值型数据的总和(编辑)
235
 # 计算指定列中数值型数据的总和(编辑)
233
-def calculate_column_sum1(list1,index):
236
+def calculate_column_sum1(list1, index):
234
     sum = 0
237
     sum = 0
235
     for li in list1:
238
     for li in list1:
236
         if li[index] == '' or li[index] == ' ' or li[index] == None:
239
         if li[index] == '' or li[index] == ' ' or li[index] == None:
239
             sum = sum + float(li[index])
242
             sum = sum + float(li[index])
240
     return sum
243
     return sum
241
 
244
 
245
+
242
 # 遍历获取序号的数据(修改数据)
246
 # 遍历获取序号的数据(修改数据)
243
 def get_data_from_excel1(list1):
247
 def get_data_from_excel1(list1):
244
     data = []
248
     data = []

+ 142
- 0
Back/GC/GCExport.py View File

271
             QMessageBox.critical(ui, '错误', '请确认文件没有被其他程序(如Excel、文本编辑器等)打开。')
271
             QMessageBox.critical(ui, '错误', '请确认文件没有被其他程序(如Excel、文本编辑器等)打开。')
272
         else:
272
         else:
273
             QMessageBox.critical(ui, '错误', f'导出初始数据过程中发生错误: {str(e)}')
273
             QMessageBox.critical(ui, '错误', f'导出初始数据过程中发生错误: {str(e)}')
274
+            print(e)
275
+
276
+
277
+def export_example_data(ui, utf_en, db_path, export_folder):
278
+    try:
279
+        # 解码 utf_en
280
+        decoded_utf_en = utf_en.decode('utf-8') if isinstance(utf_en, bytes) else utf_en
281
+
282
+        # 创建一个新的 Excel 工作簿
283
+        wb = Workbook()
284
+        ws = wb.active
285
+
286
+        # 合并指定的单元格
287
+        merge_cells = ['A1:B1', 'D1:E1', 'F1:G1', 'I1:J1']
288
+        for cell_range in merge_cells:
289
+            ws.merge_cells(cell_range)
290
+
291
+        # 设置合并单元格后的居中对齐
292
+        for cell_range in merge_cells:
293
+            cell = ws[cell_range.split(':')[0]]
294
+            cell.alignment = Alignment(horizontal='center', vertical='center')
295
+        # 连接数据库
296
+        conn = sqlite3.connect(db_path)
297
+        cursor = conn.cursor()
298
+
299
+        # 查询 GC_Input_Param 表获取 ObservationLevel, Last_ResultName, New_ResultName, Ms_Station 字段
300
+        query_observation_level = "SELECT ObservationLevel, Last_ResultName, New_ResultName, Ms_Station FROM GC_Input_Param WHERE TableName=?"
301
+        cursor.execute(query_observation_level, (utf_en,))
302
+        result = cursor.fetchone()
303
+        if result:
304
+            observation_level, last_result_name, new_result_name, ms_station = result
305
+        else:
306
+            observation_level = "未找到"
307
+            last_result_name = "未找到"
308
+            new_result_name = "未找到"
309
+            ms_station = "未找到"
310
+
311
+        # 填写表头信息
312
+        ws['A1'] = '观测等级'
313
+        ws['C1'] = observation_level  # 将 ObservationLevel 写入 C1 单元格
314
+        ws['A2'] = '序号'
315
+        ws['B2'] = '起点'
316
+        ws['C2'] = '终点'
317
+        ws['D2'] = '高差(m)'
318
+        ws['E2'] = '路线长(km)'
319
+        ws['F1'] = '测站全中误差(mm)'
320
+        ws['F2'] = '序号'
321
+        ws['G2'] = '起点'
322
+        ws['H2'] = '终点'
323
+        ws['I2'] = '高差(m)'
324
+        ws['J2'] = '路线长(km)'
325
+
326
+        # 写入 Last_ResultName, New_ResultName, Ms_Station 到相应的单元格
327
+        ws['D1'] = last_result_name
328
+        ws['I1'] = new_result_name
329
+        ws['H1'] = ms_station
330
+
331
+        # 设置 H1 单元格的数值格式为保留两位小数
332
+        ws['H1'].number_format = '0.00'
333
+
334
+        # 连接数据库
335
+        conn = sqlite3.connect(db_path)
336
+        cursor = conn.cursor()
337
+
338
+        # 查询数据库表为DataFrame,添加 TableName 条件
339
+        query = "SELECT * FROM GC_Input_Point WHERE TableName=?"
340
+        cursor.execute(query, (utf_en,))
341
+        rows = cursor.fetchall()
342
+
343
+        # 获取列名
344
+        column_names = [description[0] for description in cursor.description]
345
+
346
+        # 定义需要的列索引
347
+        last_id_index = column_names.index('Last_ID')
348
+        last_spname_index = column_names.index('Last_SPName')
349
+        last_epname_index = column_names.index('Last_EPName')
350
+        last_hdiff_index = column_names.index('Last_HDiff')
351
+        last_rlen_index = column_names.index('Last_RLen')
352
+        new_id_index = column_names.index('New_ID')
353
+        new_spname_index = column_names.index('New_SPName')
354
+        new_epname_index = column_names.index('New_EPName')
355
+        new_hdiff_index = column_names.index('New_HDiff')
356
+        new_rlen_index = column_names.index('New_RLen')
357
+
358
+        # 填充数据到Excel
359
+        for idx, row in enumerate(rows, start=3):
360
+            ws.cell(row=idx, column=1, value=row[last_id_index])
361
+            ws.cell(row=idx, column=2, value=row[last_spname_index])
362
+            ws.cell(row=idx, column=3, value=row[last_epname_index])
363
+            ws.cell(row=idx, column=4, value=row[last_hdiff_index])
364
+            ws.cell(row=idx, column=5, value=row[last_rlen_index])
365
+            ws.cell(row=idx, column=6, value=row[new_id_index])
366
+            ws.cell(row=idx, column=7, value=row[new_spname_index])
367
+            ws.cell(row=idx, column=8, value=row[new_epname_index])
368
+            ws.cell(row=idx, column=9, value=row[new_hdiff_index])
369
+            ws.cell(row=idx, column=10, value=row[new_rlen_index])
370
+
371
+            # 设置 D, E, I, J 列为强制保留六位小数
372
+            ws.cell(row=idx, column=4).number_format = '0.000000'
373
+            ws.cell(row=idx, column=5).number_format = '0.000000'
374
+            ws.cell(row=idx, column=9).number_format = '0.000000'
375
+            ws.cell(row=idx, column=10).number_format = '0.000000'
376
+        # 设置B,C,G,H的列宽为9.25
377
+        ws.column_dimensions['B'].width = 9.25
378
+        ws.column_dimensions['C'].width = 9.25
379
+        ws.column_dimensions['G'].width = 9.25
380
+        ws.column_dimensions['H'].width = 9.25
381
+
382
+        # 设置 D, E, I, J 列的列宽为11.5
383
+        ws.column_dimensions['D'].width = 11.5
384
+        ws.column_dimensions['E'].width = 11.5
385
+        ws.column_dimensions['I'].width = 11.5
386
+        ws.column_dimensions['J'].width = 11.5
387
+
388
+        # 设置文件名
389
+        excel_filename = f"{os.path.splitext(decoded_utf_en)[0]}.xlsx"
390
+        excel_filepath = os.path.join(export_folder, excel_filename)
391
+
392
+        # 保存 Excel 文件
393
+        wb.save(excel_filepath)
394
+
395
+        QMessageBox.information(ui, '成功', f'示例文件已成功导出到 {export_folder}')
396
+    except Exception as e:
397
+        if isinstance(e, PermissionError) or (isinstance(e, OSError) and e.errno == 13):
398
+            QMessageBox.critical(ui, '错误', '请确认文件没有被其他程序(如Excel、文本编辑器等)打开。')
399
+        else:
400
+            QMessageBox.critical(ui, '错误', f'导出初始数据过程中发生错误: {str(e)}')
401
+            print(e)
402
+
274
 
403
 
275
 def process_utf_en(utf_en):
404
 def process_utf_en(utf_en):
276
     # 确保 utf_en 是字节字符串
405
     # 确保 utf_en 是字节字符串
304
     export_initial_data(ui, utf_en, db_path, export_folder)
433
     export_initial_data(ui, utf_en, db_path, export_folder)
305
 
434
 
306
 
435
 
436
+def main_function_example(ui, utf_en, db_path):
437
+
438
+    # 获取应用的安装目录
439
+    app_install_dir = os.path.dirname(os.path.abspath(__file__))  # 假设脚本文件位于应用的安装目录下
440
+    example_folder = os.path.join(app_install_dir, 'Example')
441
+
442
+    # 如果 Example 文件夹不存在,则创建它
443
+    if not os.path.exists(example_folder):
444
+        os.makedirs(example_folder)
445
+
446
+    # 调用导出初始数据函数
447
+    export_example_data(ui, utf_en, db_path, example_folder)
448
+
307
 def main_function_result(ui, utf_en, db_path):
449
 def main_function_result(ui, utf_en, db_path):
308
     # 处理 utf_en
450
     # 处理 utf_en
309
     utf_en = process_utf_en(utf_en)
451
     utf_en = process_utf_en(utf_en)

+ 14
- 0
Front/main.py View File

29
 import platform
29
 import platform
30
 
30
 
31
 import Back.Program_Run.database_operations
31
 import Back.Program_Run.database_operations
32
+from Back.GC.GCExport import main_function_example
32
 # IMPORT / GUI AND MODULES AND WIDGETS
33
 # IMPORT / GUI AND MODULES AND WIDGETS
33
 # ///////////////////////////////////////////////////////////////
34
 # ///////////////////////////////////////////////////////////////
34
 from modules import *
35
 from modules import *
1107
         self.ui.resultTableView1.setEditTriggers(QTableView.EditTrigger.AllEditTriggers)
1108
         self.ui.resultTableView1.setEditTriggers(QTableView.EditTrigger.AllEditTriggers)
1108
 
1109
 
1109
 
1110
 
1111
+    def on_download_3_clicked(self):
1112
+        # 获取应用的安装目录
1113
+        app_install_dir = os.path.dirname(os.path.abspath(__file__))
1114
+        # 构建数据库路径
1115
+        db_path = os.path.join(app_install_dir, '..',  'SQL', 'DataBase.db')
1116
+        db_path = os.path.abspath(db_path)
1117
+        file_name = "水准测段高差稳定计算示例文件.xlsx"
1118
+        utf_en = file_name.encode('utf-8')
1119
+        print(db_path)
1120
+        # 调用main_function_example函数
1121
+        main_function_example(self, utf_en, db_path)
1122
+
1123
+
1110
 
1124
 
1111
 
1125
 
1112
 
1126
 

+ 5
- 3
Front/modules/ui_main.py View File

30
     Data_in_Cell2
30
     Data_in_Cell2
31
 from Back.Program_Run.database_operations import create_database_and_tables
31
 from Back.Program_Run.database_operations import create_database_and_tables
32
 from Back.Program_Run.file_system_watching import ComboBoxUpdater
32
 from Back.Program_Run.file_system_watching import ComboBoxUpdater
33
+from Back.GC.GCExport import main_function_example
34
+
33
 from watchdog.observers import Observer
35
 from watchdog.observers import Observer
34
 
36
 
35
 from .resources_rc import *
37
 from .resources_rc import *
1456
         # 下载3
1458
         # 下载3
1457
         self.download_3 = QPushButton(self.row_3)
1459
         self.download_3 = QPushButton(self.row_3)
1458
         self.download_3.setObjectName(u"download_3")
1460
         self.download_3.setObjectName(u"download_3")
1461
+        self.download_3.clicked.connect(self.main_window.on_download_3_clicked)
1459
 
1462
 
1460
         self.verticalLayout_22.addWidget(self.download_3)
1463
         self.verticalLayout_22.addWidget(self.download_3)
1461
 
1464
 
1736
         icon6.addFile(u":/icons/images/icons/3.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
1739
         icon6.addFile(u":/icons/images/icons/3.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
1737
         self.View.addTab(self.printTable1, icon6, "")
1740
         self.View.addTab(self.printTable1, icon6, "")
1738
 
1741
 
1739
-
1740
         self.inputTable1 = QWidget()
1742
         self.inputTable1 = QWidget()
1741
         self.inputTable1.setObjectName(u"inputTable1")
1743
         self.inputTable1.setObjectName(u"inputTable1")
1742
         # self.inputTable.setCursor(QCursor(Qt.CursorShape.UpArrowCursor))
1744
         # self.inputTable.setCursor(QCursor(Qt.CursorShape.UpArrowCursor))
1763
         # self.reconTableView1.setSortingEnabled(True)
1765
         # self.reconTableView1.setSortingEnabled(True)
1764
         # self.inputTableView1.setSortingEnabled(True)
1766
         # self.inputTableView1.setSortingEnabled(True)
1765
 
1767
 
1766
-        #都不能编辑
1768
+        # 都不能编辑
1767
         self.resultTableView.setEditTriggers(QTableView.EditTrigger.NoEditTriggers)
1769
         self.resultTableView.setEditTriggers(QTableView.EditTrigger.NoEditTriggers)
1768
         self.resultTableView1.setEditTriggers(QTableView.EditTrigger.NoEditTriggers)
1770
         self.resultTableView1.setEditTriggers(QTableView.EditTrigger.NoEditTriggers)
1769
         self.reconTableView.setEditTriggers(QTableView.EditTrigger.NoEditTriggers)
1771
         self.reconTableView.setEditTriggers(QTableView.EditTrigger.NoEditTriggers)
1770
         self.reconTableView1.setEditTriggers(QTableView.EditTrigger.NoEditTriggers)
1772
         self.reconTableView1.setEditTriggers(QTableView.EditTrigger.NoEditTriggers)
1771
         self.inputTableView1.setEditTriggers(QTableView.EditTrigger.NoEditTriggers)
1773
         self.inputTableView1.setEditTriggers(QTableView.EditTrigger.NoEditTriggers)
1772
 
1774
 
1773
-
1774
         self.formLayout_3.setLayout(0, QFormLayout.FieldRole, self.verticalLayout_30)
1775
         self.formLayout_3.setLayout(0, QFormLayout.FieldRole, self.verticalLayout_30)
1775
 
1776
 
1776
         self.stackedWidget.addWidget(self.datainfo)
1777
         self.stackedWidget.addWidget(self.datainfo)
2050
         self.btn_message.setText(QCoreApplication.translate("MainWindow", u"\u5207\u6362\u4e3b\u9898", None))
2051
         self.btn_message.setText(QCoreApplication.translate("MainWindow", u"\u5207\u6362\u4e3b\u9898", None))
2051
         self.creditsLabel.setText(QCoreApplication.translate("MainWindow", u"\u7248\u6743\u4fe1\u606f", None))
2052
         self.creditsLabel.setText(QCoreApplication.translate("MainWindow", u"\u7248\u6743\u4fe1\u606f", None))
2052
         self.version.setText(QCoreApplication.translate("MainWindow", u"v1.0.0", None))
2053
         self.version.setText(QCoreApplication.translate("MainWindow", u"v1.0.0", None))
2054
+

Loading…
Cancel
Save