Просмотр исходного кода

完成了GC示例文件的下载

wzp 3 месяцев назад
Родитель
Сommit
5c4af658ca
4 измененных файлов: 168 добавлений и 6 удалений
  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 Просмотреть файл

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

+ 142
- 0
Back/GC/GCExport.py Просмотреть файл

@@ -271,6 +271,135 @@ def export_initial_data(ui, utf_en, db_path, export_folder):
271 271
             QMessageBox.critical(ui, '错误', '请确认文件没有被其他程序(如Excel、文本编辑器等)打开。')
272 272
         else:
273 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 404
 def process_utf_en(utf_en):
276 405
     # 确保 utf_en 是字节字符串
@@ -304,6 +433,19 @@ def main_function_initial(ui, utf_en, db_path):
304 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 449
 def main_function_result(ui, utf_en, db_path):
308 450
     # 处理 utf_en
309 451
     utf_en = process_utf_en(utf_en)

+ 14
- 0
Front/main.py Просмотреть файл

@@ -29,6 +29,7 @@ import os
29 29
 import platform
30 30
 
31 31
 import Back.Program_Run.database_operations
32
+from Back.GC.GCExport import main_function_example
32 33
 # IMPORT / GUI AND MODULES AND WIDGETS
33 34
 # ///////////////////////////////////////////////////////////////
34 35
 from modules import *
@@ -1107,6 +1108,19 @@ class MainWindow(QMainWindow):
1107 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 Просмотреть файл

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

Загрузка…
Отмена
Сохранить