|
@@ -63,7 +63,7 @@ def Arrange_Data2(list1):
|
63
|
63
|
return list2
|
64
|
64
|
|
65
|
65
|
|
66
|
|
-def openpyxl_write(folder_name, dbpath, filename,file_name):
|
|
66
|
+def openpyxl_write(folder_name, dbpath, filename, file_name):
|
67
|
67
|
utf_en = filename.encode('utf-8')
|
68
|
68
|
# 新建对应的excel
|
69
|
69
|
wb = openpyxl.Workbook()
|
|
@@ -234,7 +234,7 @@ def openpyxl_write(folder_name, dbpath, filename,file_name):
|
234
|
234
|
wb.save(excel_filepath)
|
235
|
235
|
|
236
|
236
|
|
237
|
|
-def export_initial_data(ui, db_path, utf_en, export_folder,file_name):
|
|
237
|
+def export_initial_data(ui, db_path, utf_en, export_folder, file_name):
|
238
|
238
|
# 获取当前时间并格式化为字符串,例如:20231010_143000
|
239
|
239
|
timestamp = time.strftime("%Y%m%d", time.localtime())
|
240
|
240
|
# 解码 utf_en
|
|
@@ -359,7 +359,8 @@ def export_initial_data(ui, db_path, utf_en, export_folder,file_name):
|
359
|
359
|
# 保存工作簿
|
360
|
360
|
wb.save(excel_path)
|
361
|
361
|
|
362
|
|
-def export_example_data(ui, db_path, utf_en, export_folder,file_name):
|
|
362
|
+
|
|
363
|
+def export_example_data(ui, db_path, utf_en, export_folder, file_name):
|
363
|
364
|
# 解码 utf_en
|
364
|
365
|
decoded_utf_en = utf_en.decode('utf-8') if isinstance(utf_en, bytes) else utf_en
|
365
|
366
|
# excel_file_name = f"{os.path.splitext(decoded_utf_en)[0]}.xlsx"
|
|
@@ -482,32 +483,263 @@ def export_example_data(ui, db_path, utf_en, export_folder,file_name):
|
482
|
483
|
# 保存工作簿
|
483
|
484
|
wb.save(excel_path)
|
484
|
485
|
|
|
486
|
+
|
|
487
|
+# 合并导出函数
|
|
488
|
+def combined_export(folder_name, dbpath, filename, file_name):
|
|
489
|
+ utf_en = filename.encode('utf-8')
|
|
490
|
+ # 创建新工作簿
|
|
491
|
+ wb = openpyxl.Workbook()
|
|
492
|
+
|
|
493
|
+ # ========== Sheet1: 初始数据 ==========
|
|
494
|
+ ws_initial = wb.active
|
|
495
|
+ ws_initial.title = "初始数据"
|
|
496
|
+
|
|
497
|
+ # 处理初始数据(原export_initial_data逻辑)
|
|
498
|
+ conn = sqlite3.connect(dbpath)
|
|
499
|
+ cursor = conn.cursor()
|
|
500
|
+
|
|
501
|
+ # 样式定义
|
|
502
|
+ decimal_style_3 = NamedStyle(name="decimal_style_3")
|
|
503
|
+ decimal_style_3.number_format = '0.000'
|
|
504
|
+ decimal_style_3.alignment = Alignment(horizontal='center', vertical='center')
|
|
505
|
+
|
|
506
|
+ decimal_style_1 = NamedStyle(name="decimal_style_1")
|
|
507
|
+ decimal_style_1.number_format = '0.0'
|
|
508
|
+ decimal_style_1.alignment = Alignment(horizontal='center', vertical='center')
|
|
509
|
+
|
|
510
|
+ decimal_style_4 = NamedStyle(name="decimal_style_4")
|
|
511
|
+ decimal_style_4.number_format = '0.0000'
|
|
512
|
+ decimal_style_4.alignment = Alignment(horizontal='center', vertical='center')
|
|
513
|
+
|
|
514
|
+ # 处理GS_Input_Param数据
|
|
515
|
+ param_query = """SELECT New_ResultName, Last_ResultName, Avg_SL, Ms_Dir,
|
|
516
|
+ Ms_WSL, SL_Count, Dir_Count, Scale_Value
|
|
517
|
+ FROM GS_Input_Param WHERE TableName = ?"""
|
|
518
|
+ cursor.execute(param_query, (utf_en,))
|
|
519
|
+ param_result = cursor.fetchone()
|
|
520
|
+
|
|
521
|
+ if param_result:
|
|
522
|
+ new_result_name, last_result_name, avg_sl, ms_dir, ms_wsl, sl_count, dir_count, scale_value = param_result
|
|
523
|
+
|
|
524
|
+ # 填充参数数据
|
|
525
|
+ ws_initial['B1'] = new_result_name
|
|
526
|
+ ws_initial['D1'] = last_result_name
|
|
527
|
+ ws_initial['G1'] = avg_sl
|
|
528
|
+ ws_initial['G2'] = ms_dir
|
|
529
|
+ ws_initial['G3'] = ms_wsl
|
|
530
|
+ ws_initial['G4'] = sl_count
|
|
531
|
+ ws_initial['G5'] = dir_count
|
|
532
|
+ ws_initial['G6'] = scale_value
|
|
533
|
+
|
|
534
|
+ # 应用样式
|
|
535
|
+ ws_initial['G1'].style = decimal_style_3
|
|
536
|
+ ws_initial['G4'].style = decimal_style_1
|
|
537
|
+ ws_initial['G5'].style = decimal_style_1
|
|
538
|
+ ws_initial['G6'].style = decimal_style_4
|
|
539
|
+
|
|
540
|
+ # 合并单元格
|
|
541
|
+ ws_initial.merge_cells('B1:C1')
|
|
542
|
+ ws_initial.merge_cells('D1:E1')
|
|
543
|
+ ws_initial['B1'].alignment = Alignment(horizontal='center', vertical='center')
|
|
544
|
+ ws_initial['D1'].alignment = Alignment(horizontal='center', vertical='center')
|
|
545
|
+
|
|
546
|
+ # 处理GS_Input_Point数据
|
|
547
|
+ point_query = """SELECT PointName, New_X, New_Y, Last_X, Last_Y
|
|
548
|
+ FROM GS_Input_Point WHERE TableName = ?"""
|
|
549
|
+ cursor.execute(point_query, (utf_en,))
|
|
550
|
+ point_results = cursor.fetchall()
|
|
551
|
+
|
|
552
|
+ # 设置表头
|
|
553
|
+ headers = [
|
|
554
|
+ ("A2", "点名"), ("B2", "高斯坐标x(m)"), ("C2", "高斯坐标y(m)"),
|
|
555
|
+ ("D2", "高斯坐标x(m)"), ("E2", "高斯坐标y(m)"), ("F1", "平均边长(m)"),
|
|
556
|
+ ("F2", "方向值中误差(″)"), ("F3", "最弱边边长相对中误差"),
|
|
557
|
+ ("F4", "网点总测边数"), ("F5", "网点总方向观测数"), ("F6", "缩放值")
|
|
558
|
+ ]
|
|
559
|
+
|
|
560
|
+ for cell, value in headers:
|
|
561
|
+ ws_initial[cell] = value
|
|
562
|
+ ws_initial[cell].alignment = Alignment(horizontal='center', vertical='center')
|
|
563
|
+
|
|
564
|
+ # 填充点数据
|
|
565
|
+ decimal_style = NamedStyle(name="decimal_style")
|
|
566
|
+ decimal_style.number_format = '0000.0000'
|
|
567
|
+ for idx, (point_name, new_x, new_y, last_x, last_y) in enumerate(point_results, start=3):
|
|
568
|
+ ws_initial[f'A{idx}'] = point_name
|
|
569
|
+ ws_initial[f'B{idx}'] = round(new_x, 4)
|
|
570
|
+ ws_initial[f'C{idx}'] = round(new_y, 4)
|
|
571
|
+ ws_initial[f'D{idx}'] = round(last_x, 4)
|
|
572
|
+ ws_initial[f'E{idx}'] = round(last_y, 4)
|
|
573
|
+ for col in ['B', 'C', 'D', 'E']:
|
|
574
|
+ ws_initial[f'{col}{idx}'].style = decimal_style
|
|
575
|
+
|
|
576
|
+ # ========== 后续工作表:原openpyxl_write内容 ==========
|
|
577
|
+ # 创建其他工作表(自动按顺序添加)
|
|
578
|
+ ws1 = wb.create_sheet('复测基准归算表')
|
|
579
|
+ ws2 = wb.create_sheet('复测成果表')
|
|
580
|
+ ws3 = wb.create_sheet('基准归算模型')
|
|
581
|
+
|
|
582
|
+ # 原openpyxl_write中的数据库查询和表格生成逻辑
|
|
583
|
+ # -- 复测基准归算表 --
|
|
584
|
+ cursor.execute(
|
|
585
|
+ 'SELECT PointName,Cal_X,Cal_Y,Last_CalX,Last_CalY,Last_CalP,Dis_Ass,Last_ResultName,New_ResultName FROM GS_Result_Point WHERE TableName = ?',
|
|
586
|
+ (utf_en,))
|
|
587
|
+ result1 = cursor.fetchall()
|
|
588
|
+ plist1 = Arrange_Data1(result1)
|
|
589
|
+
|
|
590
|
+ # 工作表格式设置(保持原openpyxl_write中的格式代码不变)
|
|
591
|
+ ws1.column_dimensions['A'].width = 5
|
|
592
|
+ ws1.column_dimensions['B'].width = 15
|
|
593
|
+ ws1.column_dimensions['C'].width = 15
|
|
594
|
+ ws1.column_dimensions['D'].width = 8
|
|
595
|
+ ws1.column_dimensions['E'].width = 8
|
|
596
|
+ ws1.column_dimensions['F'].width = 8
|
|
597
|
+ ws1.column_dimensions['G'].width = 5
|
|
598
|
+ ws1.merge_cells(start_row=1, end_row=1, start_column=1, end_column=7)
|
|
599
|
+ ws1.cell(1, 1).value = '复测基准归算与位移判定'
|
|
600
|
+ ws1.merge_cells(start_row=2, end_row=3, start_column=1, end_column=1)
|
|
601
|
+ ws1.cell(2, 1).value = '点名'
|
|
602
|
+ ws1.merge_cells(start_row=2, end_row=2, start_column=2, end_column=3)
|
|
603
|
+ ws1.cell(2, 2).value = plist1[0][8] + '基准归算成果'
|
|
604
|
+ ws1.merge_cells(start_row=2, end_row=2, start_column=4, end_column=6)
|
|
605
|
+ ws1.cell(2, 4).value = plist1[0][7] + '-归算成果(mm)'
|
|
606
|
+ ws_area = ws1["A1:H3"]
|
|
607
|
+ alignment_center = Alignment(horizontal='center', vertical='center')
|
|
608
|
+ for i in ws_area:
|
|
609
|
+ for j in i:
|
|
610
|
+ j.alignment = alignment_center
|
|
611
|
+ alignment_right = Alignment(horizontal='right', vertical='center')
|
|
612
|
+ ws1.merge_cells(start_row=2, end_row=3, start_column=7, end_column=7)
|
|
613
|
+ ws1.cell(2, 7).value = '位移判定'
|
|
614
|
+ ws1.cell(2, 7).alignment = Alignment(wrap_text=True)
|
|
615
|
+ ws1.cell(3, 2).value = 'X(mm)'
|
|
616
|
+ ws1.cell(3, 3).value = 'Y(mm)'
|
|
617
|
+ ws1.cell(3, 4).value = '△X'
|
|
618
|
+ ws1.cell(3, 5).value = '△Y'
|
|
619
|
+ ws1.cell(3, 6).value = '△P'
|
|
620
|
+ row1 = 4
|
|
621
|
+ for data1 in plist1:
|
|
622
|
+ ws1.cell(row1, 1).value = data1[0]
|
|
623
|
+ ws1.cell(row1, 2).value = round(data1[1], 4)
|
|
624
|
+ ws1.cell(row1, 3).value = round(data1[2], 4)
|
|
625
|
+ ws1.cell(row1, 4).value = round(data1[3], 1)
|
|
626
|
+ ws1.cell(row1, 5).value = round(data1[4], 1)
|
|
627
|
+ ws1.cell(row1, 6).value = round(data1[5], 1)
|
|
628
|
+ if data1[6] == '稳定':
|
|
629
|
+ ws1.cell(row1, 7).value = ''
|
|
630
|
+ else:
|
|
631
|
+ ws1.cell(row1, 7).value = data1[6]
|
|
632
|
+ row1 = row1 + 1
|
|
633
|
+
|
|
634
|
+ # -- 复测成果表 --
|
|
635
|
+ cursor.execute(
|
|
636
|
+ '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 = ?',
|
|
637
|
+ (utf_en,))
|
|
638
|
+ result2 = cursor.fetchall()
|
|
639
|
+ plist2 = Arrange_Data2(result2)
|
|
640
|
+ ws2.column_dimensions['A'].width = 5
|
|
641
|
+ ws2.column_dimensions['B'].width = 15
|
|
642
|
+ ws2.column_dimensions['C'].width = 15
|
|
643
|
+ ws2.column_dimensions['D'].width = 15
|
|
644
|
+ ws2.column_dimensions['E'].width = 15
|
|
645
|
+ ws2.column_dimensions['F'].width = 8
|
|
646
|
+ ws2.column_dimensions['G'].width = 8
|
|
647
|
+ ws2.column_dimensions['H'].width = 8
|
|
648
|
+ ws2.column_dimensions['I'].width = 5
|
|
649
|
+ ws2.merge_cells(start_row=1, end_row=1, start_column=1, end_column=3)
|
|
650
|
+ ws2.cell(1, 1).value = '前期成果'
|
|
651
|
+ ws2.merge_cells(start_row=1, end_row=1, start_column=4, end_column=9)
|
|
652
|
+ ws2.cell(1, 4).value = '本期成果'
|
|
653
|
+ ws_area = ws2["A1:I2"]
|
|
654
|
+ alignment_center = Alignment(horizontal='center', vertical='center')
|
|
655
|
+ for i in ws_area:
|
|
656
|
+ for j in i:
|
|
657
|
+ j.alignment = alignment_center
|
|
658
|
+ alignment_right = Alignment(horizontal='right', vertical='center')
|
|
659
|
+ ws2.merge_cells(start_row=2, end_row=3, start_column=1, end_column=1)
|
|
660
|
+ ws2.cell(2, 1).value = '点名'
|
|
661
|
+ ws2.merge_cells(start_row=2, end_row=2, start_column=2, end_column=3)
|
|
662
|
+ ws2.cell(2, 2).value = plist2[0][9]
|
|
663
|
+ ws2.merge_cells(start_row=2, end_row=2, start_column=4, end_column=5)
|
|
664
|
+ ws2.cell(2, 4).value = plist2[0][10]
|
|
665
|
+ ws2.merge_cells(start_row=2, end_row=2, start_column=6, end_column=8)
|
|
666
|
+ newname_1 = plist2[0][9] + '-' + plist2[0][10] + '(mm)'
|
|
667
|
+ ws2.cell(2, 6).value = newname_1
|
|
668
|
+ ws2.merge_cells(start_row=2, end_row=3, start_column=9, end_column=9)
|
|
669
|
+ ws2.cell(2, 9).value = '位移判定'
|
|
670
|
+ ws2.cell(2, 9).alignment = Alignment(wrap_text=True)
|
|
671
|
+ ws2.cell(3, 2).value = 'X(m)'
|
|
672
|
+ ws2.cell(3, 3).value = 'Y(m)'
|
|
673
|
+ ws2.cell(3, 4).value = 'X(m)'
|
|
674
|
+ ws2.cell(3, 5).value = 'Y(m)'
|
|
675
|
+ ws2.cell(3, 6).value = '△X'
|
|
676
|
+ ws2.cell(3, 7).value = '△Y'
|
|
677
|
+ ws2.cell(3, 8).value = '△XY'
|
|
678
|
+ row2 = 4
|
|
679
|
+ for data2 in plist2:
|
|
680
|
+ ws2.cell(row2, 1).value = data2[0]
|
|
681
|
+ ws2.cell(row2, 2).value = round(data2[1], 4)
|
|
682
|
+ ws2.cell(row2, 3).value = round(data2[2], 4)
|
|
683
|
+ ws2.cell(row2, 4).value = round(data2[3], 4)
|
|
684
|
+ ws2.cell(row2, 5).value = round(data2[4], 4)
|
|
685
|
+ ws2.cell(row2, 6).value = round(data2[5], 1)
|
|
686
|
+ ws2.cell(row2, 7).value = round(data2[6], 1)
|
|
687
|
+ ws2.cell(row2, 8).value = round(data2[7], 1)
|
|
688
|
+ if data2[8] == '稳定':
|
|
689
|
+ ws2.cell(row2, 9).value = ''
|
|
690
|
+ else:
|
|
691
|
+ ws2.cell(row2, 9).value = data2[8]
|
|
692
|
+ row2 = row2 + 1
|
|
693
|
+
|
|
694
|
+ # -- 基准归算模型 --
|
|
695
|
+ cursor.execute(
|
|
696
|
+ 'SELECT Last_ResultName,New_ResultName,Formula_X1,Formula_X2,Formula_X3,Formula_Y1,Formula_Y2,Formula_Y3 FROM GS_Trans_Param WHERE TableName = ?',
|
|
697
|
+ (utf_en,))
|
|
698
|
+ result3 = cursor.fetchall()
|
|
699
|
+
|
|
700
|
+ newname = result3[0][1].decode('utf-8')
|
|
701
|
+ lastname = result3[0][0].decode('utf-8')
|
|
702
|
+ ws3.column_dimensions['A'].width = 75
|
|
703
|
+ ws_area = ws3["A1:A5"]
|
|
704
|
+ alignment_center = Alignment(horizontal='left', vertical='center')
|
|
705
|
+ for i in ws_area:
|
|
706
|
+ for j in i:
|
|
707
|
+ j.alignment = alignment_center
|
|
708
|
+ str1 = newname + '--' + lastname + '已知系统转换公式:'
|
|
709
|
+ ws3.cell(1, 1).value = str1
|
|
710
|
+ str2 = 'X=(' + str(round(result3[0][2], 14)) + ')·x+(' + str(round(result3[0][3], 14)) + ')·y+(' + str(
|
|
711
|
+ round(result3[0][4], 11)) + ')'
|
|
712
|
+ ws3.cell(2, 1).value = str2
|
|
713
|
+ str3 = 'Y=(' + str(round(result3[0][5], 14)) + ')·x+(' + str(round(result3[0][6], 14)) + ')·y+(' + str(
|
|
714
|
+ round(result3[0][7], 11)) + ')'
|
|
715
|
+ ws3.cell(3, 1).value = str3
|
|
716
|
+ str4 = '式中:x、y为' + newname
|
|
717
|
+ ws3.cell(4, 1).value = str4
|
|
718
|
+ str5 = ' X、Y为' + lastname + '已知系统的' + newname + '归算坐标'
|
|
719
|
+ ws3.cell(5, 1).value = str5
|
|
720
|
+
|
|
721
|
+ # 删除默认创建的空白Sheet(如果有)
|
|
722
|
+ if 'Sheet' in wb.sheetnames:
|
|
723
|
+ wb.remove(wb['Sheet'])
|
|
724
|
+
|
|
725
|
+ # 保存文件
|
|
726
|
+ excel_filepath = os.path.join(folder_name, file_name)
|
|
727
|
+ wb.save(excel_filepath)
|
|
728
|
+ conn.close()
|
|
729
|
+
|
|
730
|
+
|
485
|
731
|
# 主函数 写入excel文件
|
486
|
|
-def main_function(ui, dbpath, excelname,export_folder,file_name):
|
487
|
|
- # # 获取应用的安装目录
|
488
|
|
- # app_install_dir = os.getcwd() # 假设脚本文件位于应用的安装目录下
|
489
|
|
- # export_folder = os.path.join(app_install_dir, 'Export')
|
490
|
|
- #
|
491
|
|
- # # 如果 Export 文件夹不存在,则创建它
|
492
|
|
- # if not os.path.exists(export_folder):
|
493
|
|
- # os.makedirs(export_folder)
|
|
732
|
+def main_function(ui, dbpath, excelname, export_folder, file_name):
|
494
|
733
|
try:
|
495
|
|
- openpyxl_write(export_folder, dbpath, excelname,file_name)
|
|
734
|
+ openpyxl_write(export_folder, dbpath, excelname, file_name)
|
496
|
735
|
QMessageBox.information(ui, '成功', f'成果文件已成功导出到 {export_folder}')
|
497
|
736
|
except Exception as e:
|
498
|
737
|
QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
499
|
738
|
|
500
|
739
|
|
501
|
|
-def main_function_initial(ui, dbpath, excelname_utf8,export_folder,file_name):
|
502
|
|
- # # 获取应用的安装目录
|
503
|
|
- # app_install_dir = os.getcwd() # 假设脚本文件位于应用的安装目录下
|
504
|
|
- # export_folder = os.path.join(app_install_dir, 'Export')
|
505
|
|
- #
|
506
|
|
- # # 如果 Export 文件夹不存在,则创建它
|
507
|
|
- # if not os.path.exists(export_folder):
|
508
|
|
- # os.makedirs(export_folder)
|
|
740
|
+def main_function_initial(ui, dbpath, excelname_utf8, export_folder, file_name):
|
509
|
741
|
try:
|
510
|
|
- export_initial_data(ui, dbpath, excelname_utf8, export_folder,file_name)
|
|
742
|
+ export_initial_data(ui, dbpath, excelname_utf8, export_folder, file_name)
|
511
|
743
|
QMessageBox.information(ui, '成功', f'初始文件已成功导出到 {export_folder}')
|
512
|
744
|
except PermissionError as e:
|
513
|
745
|
if e.errno == 13:
|
|
@@ -518,16 +750,9 @@ def main_function_initial(ui, dbpath, excelname_utf8,export_folder,file_name):
|
518
|
750
|
QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
519
|
751
|
|
520
|
752
|
|
521
|
|
-def main_function_example(ui, dbpath, excelname_utf8,export_folder,file_name):
|
522
|
|
- # # 获取应用的安装目录
|
523
|
|
- # app_install_dir = os.getcwd() # 假设脚本文件位于应用的安装目录下
|
524
|
|
- # export_folder = os.path.join(app_install_dir, 'Example')
|
525
|
|
- #
|
526
|
|
- # # 如果 Export 文件夹不存在,则创建它
|
527
|
|
- # if not os.path.exists(export_folder):
|
528
|
|
- # os.makedirs(export_folder)
|
|
753
|
+def main_function_example(ui, dbpath, excelname_utf8, export_folder, file_name):
|
529
|
754
|
try:
|
530
|
|
- export_example_data(ui, dbpath, excelname_utf8, export_folder,file_name)
|
|
755
|
+ export_example_data(ui, dbpath, excelname_utf8, export_folder, file_name)
|
531
|
756
|
QMessageBox.information(ui, '成功', f'示例文件已成功导出到 {export_folder}')
|
532
|
757
|
except PermissionError as e:
|
533
|
758
|
if e.errno == 13:
|
|
@@ -535,4 +760,12 @@ def main_function_example(ui, dbpath, excelname_utf8,export_folder,file_name):
|
535
|
760
|
else:
|
536
|
761
|
QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
537
|
762
|
except Exception as e:
|
538
|
|
- QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
|
763
|
+ QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
|
764
|
+
|
|
765
|
+
|
|
766
|
+def main_function_combined(ui, dbpath, excelname, export_folder, file_name):
|
|
767
|
+ try:
|
|
768
|
+ combined_export(export_folder, dbpath, excelname, file_name)
|
|
769
|
+ QMessageBox.information(ui, '成功', f'数据文件已成功导出到 {export_folder}')
|
|
770
|
+ except Exception as e:
|
|
771
|
+ QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|