|
@@ -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)
|