|
@@ -47,295 +47,297 @@ def Arrange_Data1(list1):
|
47
|
47
|
return list2
|
48
|
48
|
|
49
|
49
|
|
50
|
|
-def openpyxl_write(folder_name, dbpath, filename,file_name):
|
51
|
|
- utf_en = filename.encode('utf-8')
|
52
|
|
- # 新建对应的excel
|
53
|
|
- wb = openpyxl.Workbook()
|
54
|
|
- ws1 = wb.create_sheet('稳定性分析成果表')
|
55
|
|
- ws2 = wb.create_sheet('改算模型')
|
56
|
|
- ws3 = wb['Sheet']
|
57
|
|
- wb.remove(ws3)
|
58
|
|
-
|
59
|
|
- # ws1部分(成果表)
|
60
|
|
- # 提取数据
|
61
|
|
- db1 = sqlite3.connect(dbpath)
|
62
|
|
- # 获取游标
|
63
|
|
- cursor1 = db1.cursor()
|
64
|
|
- 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 = ?'
|
65
|
|
- cursor1.execute(sqlstr1, (utf_en,))
|
66
|
|
- # 获取结果集
|
67
|
|
- result1 = cursor1.fetchall()
|
68
|
|
- # 整理数据
|
69
|
|
- plist1 = Arrange_Data1(result1)
|
70
|
|
- ws1.column_dimensions['B'].width = 15
|
71
|
|
- ws1.column_dimensions['C'].width = 15
|
72
|
|
- ws1.column_dimensions['D'].width = 15
|
73
|
|
- ws1.column_dimensions['E'].width = 15
|
74
|
|
- ws1.column_dimensions['F'].width = 5
|
75
|
|
- ws1.column_dimensions['G'].width = 15
|
76
|
|
- ws1.column_dimensions['H'].width = 15
|
77
|
|
- ws1.column_dimensions['I'].width = 5
|
78
|
|
- ws1.column_dimensions['M'].width = 5
|
79
|
|
- ws1.column_dimensions['Q'].width = 5
|
80
|
|
- ws1.column_dimensions['J'].width = 8
|
81
|
|
- ws1.column_dimensions['K'].width = 8
|
82
|
|
- ws1.column_dimensions['L'].width = 8
|
83
|
|
- ws1.column_dimensions['N'].width = 8
|
84
|
|
- ws1.column_dimensions['O'].width = 8
|
85
|
|
- ws1.column_dimensions['P'].width = 8
|
86
|
|
- ws1.merge_cells(start_row=1, end_row=1,
|
87
|
|
- start_column=1, end_column=17)
|
88
|
|
- ws1.cell(1, 1).value = '稳定性分析成果表'
|
89
|
|
- ws_area = ws1["A1:Q2"]
|
90
|
|
- alignment_center = Alignment(horizontal='center', vertical='center') # 指定区域单元格居中
|
91
|
|
- for i in ws_area:
|
92
|
|
- for j in i:
|
93
|
|
- j.alignment = alignment_center
|
94
|
|
- alignment_right = Alignment(horizontal='right', vertical='center')
|
95
|
|
- ws1.merge_cells(start_row=2, end_row=3,
|
96
|
|
- start_column=1, end_column=1)
|
97
|
|
- ws1.cell(2, 1).value = '点号'
|
98
|
|
- ws1.merge_cells(start_row=2, end_row=2,
|
99
|
|
- start_column=2, end_column=3)
|
100
|
|
- ws1.cell(2, 2).value = plist1[0][17]
|
101
|
|
- ws1.merge_cells(start_row=2, end_row=2,
|
102
|
|
- start_column=4, end_column=6)
|
103
|
|
- ws1.cell(2, 4).value = plist1[0][18]
|
104
|
|
- ws1.merge_cells(start_row=2, end_row=2,
|
105
|
|
- start_column=7, end_column=9)
|
106
|
|
-
|
107
|
|
- ws1.cell(2, 7).value = plist1[0][19]
|
108
|
|
- ws1.merge_cells(start_row=2, end_row=2,
|
109
|
|
- start_column=10, end_column=12)
|
110
|
|
- ws1.cell(2, 10).value = '本期-首期(mm)'
|
111
|
|
- ws1.merge_cells(start_row=2, end_row=3,
|
112
|
|
- start_column=13, end_column=13)
|
113
|
|
- ws1.cell(2, 13).value = '变形判定'
|
114
|
|
- ws1.merge_cells(start_row=2, end_row=2,
|
115
|
|
- start_column=14, end_column=16)
|
116
|
|
- ws1.cell(2, 14).value = '本期-上期(mm)'
|
117
|
|
- ws1.merge_cells(start_row=2, end_row=3,
|
118
|
|
- start_column=17, end_column=17)
|
119
|
|
- ws1.cell(2, 17).value = '变形判定'
|
120
|
|
- ws1.cell(2, 13).alignment = Alignment(wrap_text=True)
|
121
|
|
- ws1.cell(2, 17).alignment = Alignment(wrap_text=True)
|
122
|
|
- ws1.cell(3, 2).value = 'X(m)'
|
123
|
|
- ws1.cell(3, 3).value = 'Y(m)'
|
124
|
|
- ws1.cell(3, 4).value = 'X(m)'
|
125
|
|
- ws1.cell(3, 5).value = 'Y(m)'
|
126
|
|
- ws1.cell(3, 6).value = '权'
|
127
|
|
- ws1.cell(3, 7).value = 'X(m)'
|
128
|
|
- ws1.cell(3, 8).value = 'Y(m)'
|
129
|
|
- ws1.cell(3, 9).value = '权'
|
130
|
|
- ws1.cell(3, 10).value = '△X'
|
131
|
|
- ws1.cell(3, 11).value = '△Y'
|
132
|
|
- ws1.cell(3, 12).value = '△XY'
|
133
|
|
- ws1.cell(3, 14).value = '△X'
|
134
|
|
- ws1.cell(3, 15).value = '△Y'
|
135
|
|
- ws1.cell(3, 16).value = '△XY'
|
136
|
|
-
|
137
|
|
- row1 = 4
|
138
|
|
- for data1 in plist1:
|
139
|
|
- ws1.cell(row1, 1).value = data1[0]
|
140
|
|
- ws1.cell(row1, 2).value = round(data1[1], 4)
|
141
|
|
- ws1.cell(row1, 3).value = round(data1[2], 4)
|
142
|
|
- ws1.cell(row1, 4).value = round(data1[3], 4)
|
143
|
|
- ws1.cell(row1, 5).value = round(data1[4], 4)
|
144
|
|
- ws1.cell(row1, 6).value = int(data1[5])
|
145
|
|
- ws1.cell(row1, 7).value = round(data1[6], 4)
|
146
|
|
- ws1.cell(row1, 8).value = round(data1[7], 4)
|
147
|
|
- ws1.cell(row1, 9).value = int(data1[8])
|
148
|
|
- ws1.cell(row1, 10).value = round(data1[9], 1)
|
149
|
|
- ws1.cell(row1, 11).value = round(data1[10], 1)
|
150
|
|
- ws1.cell(row1, 12).value = round(data1[11], 1)
|
151
|
|
- if data1[12] == '稳定':
|
152
|
|
- ws1.cell(row1, 13).value = ''
|
153
|
|
- else:
|
154
|
|
- ws1.cell(row1, 13).value = data1[12]
|
155
|
|
- ws1.cell(row1, 14).value = round(data1[13], 1)
|
156
|
|
- ws1.cell(row1, 15).value = round(data1[14], 1)
|
157
|
|
- ws1.cell(row1, 16).value = round(data1[15], 1)
|
158
|
|
- if data1[16] == '稳定':
|
159
|
|
- ws1.cell(row1, 17).value = ''
|
160
|
|
- else:
|
161
|
|
- ws1.cell(row1, 17).value = data1[16]
|
162
|
|
- row1 = row1 + 1
|
163
|
|
-
|
164
|
|
- # ws2部分(公式)
|
165
|
|
- # 提取数据
|
166
|
|
- sqlstr2 = 'select Last_ResultName,New_ResultName,Formula_X1,Formula_X2,Formula_X3,Formula_Y1,Formula_Y2,Formula_Y3 from WD_Result_Param WHERE TableName = ?'
|
167
|
|
- cursor1.execute(sqlstr2, (utf_en,))
|
168
|
|
- # 获取结果集
|
169
|
|
- result3 = cursor1.fetchall()
|
170
|
|
- newname = result3[0][1].decode('utf-8')
|
171
|
|
- lastname = result3[0][0].decode('utf-8')
|
172
|
|
- ws2.column_dimensions['A'].width = 75
|
173
|
|
- ws_area = ws2["A1:A5"]
|
174
|
|
- alignment_center = Alignment(horizontal='left', vertical='center') # 指定区域单元格居中
|
175
|
|
- for i in ws_area:
|
176
|
|
- for j in i:
|
177
|
|
- j.alignment = alignment_center
|
178
|
|
- str1 = newname + '--' + lastname + '已知系统转换公式:'
|
179
|
|
- ws2.cell(1, 1).value = str1
|
180
|
|
- str2 = 'X=(' + str(round(result3[0][2], 14)) + ')·x+(' + str(round(result3[0][3], 14)) + ')·y+(' + str(
|
181
|
|
- round(result3[0][4], 11)) + ')'
|
182
|
|
- ws2.cell(2, 1).value = str2
|
183
|
|
- str3 = 'Y=(' + str(round(result3[0][5], 14)) + ')·x+(' + str(round(result3[0][6], 14)) + ')·y+(' + str(
|
184
|
|
- round(result3[0][7], 11)) + ')'
|
185
|
|
- ws2.cell(3, 1).value = str3
|
186
|
|
- str4 = '式中:x、y为' + newname
|
187
|
|
- ws2.cell(4, 1).value = str4
|
188
|
|
- str5 = ' X、Y为' + lastname + '已知系统的' + newname + '归算坐标'
|
189
|
|
- ws2.cell(5, 1).value = str5
|
190
|
|
- # 获取当前时间并格式化为字符串,例如:20231010_143000
|
191
|
|
- timestamp = time.strftime("%Y%m%d", time.localtime())
|
192
|
|
- # 保存 Excel 文件
|
193
|
|
- # excel_filename = f"{os.path.splitext(filename)[0]}-成果数据-{timestamp}.xlsx"
|
194
|
|
- excel_filepath = os.path.join(folder_name, file_name)
|
195
|
|
- wb.save(excel_filepath)
|
196
|
|
-
|
197
|
|
-
|
198
|
|
-def export_initial_data(ui, db_path, utf_en, export_folder,file_name):
|
199
|
|
- # 获取当前时间并格式化为字符串,例如:20231010_143000
|
200
|
|
- timestamp = time.strftime("%Y%m%d", time.localtime())
|
201
|
|
- # 解码文件名并去掉后缀名
|
202
|
|
- decoded_utf_en = utf_en.decode('utf-8') if isinstance(utf_en, bytes) else utf_en
|
203
|
|
- # excel_file_name = f"{os.path.splitext(decoded_utf_en)[0]}-初始数据-{timestamp}.xlsx"
|
204
|
|
- excel_path = os.path.join(export_folder, file_name)
|
205
|
|
-
|
206
|
|
- # 创建一个新的工作簿和工作表
|
207
|
|
- wb = openpyxl.Workbook()
|
208
|
|
- ws = wb.active
|
209
|
|
-
|
210
|
|
- # 连接到数据库
|
211
|
|
- conn = sqlite3.connect(db_path)
|
212
|
|
- cursor = conn.cursor()
|
213
|
|
-
|
214
|
|
- # 查询WD_Input_Param表中的数据
|
215
|
|
- query = """
|
216
|
|
- SELECT New_ResultName, Last_ResultName, Avg_SL, Ms_Dir, SL_Count, Dir_Count, Scale_Value, First_ResultName
|
217
|
|
- FROM WD_Input_Param
|
218
|
|
- WHERE TableName = ?
|
219
|
|
- """
|
220
|
|
- cursor.execute(query, (utf_en,))
|
221
|
|
- result = cursor.fetchone()
|
222
|
|
-
|
223
|
|
- # 创建样式来保留指定的小数位数
|
224
|
|
- decimal_style_3 = NamedStyle(name="decimal_style_3")
|
225
|
|
- decimal_style_3.number_format = '0.0000'
|
226
|
|
- decimal_style_3.alignment = Alignment(horizontal='center', vertical='center')
|
227
|
|
-
|
228
|
|
- decimal_style_1 = NamedStyle(name="decimal_style_1")
|
229
|
|
- decimal_style_1.number_format = '0.0'
|
230
|
|
- decimal_style_1.alignment = Alignment(horizontal='center', vertical='center')
|
231
|
|
-
|
232
|
|
- decimal_style_4 = NamedStyle(name="decimal_style_4")
|
233
|
|
- decimal_style_4.number_format = '0'
|
234
|
|
- decimal_style_4.alignment = Alignment(horizontal='center', vertical='center')
|
235
|
|
-
|
236
|
|
- if result:
|
237
|
|
- new_result_name, last_result_name, avg_sl, ms_dir, sl_count, dir_count, scale_value, first_result_name = result
|
238
|
|
-
|
239
|
|
- # 填充数据到Excel并应用样式
|
240
|
|
- ws['B1'] = new_result_name
|
241
|
|
- ws['B1'].alignment = Alignment(horizontal='center', vertical='center')
|
242
|
|
-
|
243
|
|
- ws['D1'] = last_result_name
|
244
|
|
- ws['D1'].alignment = Alignment(horizontal='center', vertical='center')
|
245
|
|
-
|
246
|
|
- ws['G1'] = first_result_name # 新增:填入First_ResultName
|
247
|
|
- ws['G1'].alignment = Alignment(horizontal='center', vertical='center') # 新增:设置居中对齐
|
248
|
|
-
|
249
|
|
- ws['J1'] = avg_sl
|
250
|
|
- ws['J1'].style = decimal_style_3
|
251
|
|
-
|
252
|
|
- ws['J2'] = ms_dir
|
253
|
|
- ws['J2'].alignment = Alignment(horizontal='center', vertical='center')
|
254
|
|
-
|
255
|
|
- ws['J3'] = sl_count
|
256
|
|
- ws['J3'].style = decimal_style_4
|
257
|
|
-
|
258
|
|
- ws['J4'] = dir_count
|
259
|
|
- ws['J4'].style = decimal_style_4
|
260
|
|
-
|
261
|
|
- ws['J5'] = scale_value
|
262
|
|
- ws['J5'].style = decimal_style_4
|
263
|
|
-
|
264
|
|
- # 合并单元格
|
265
|
|
- ws.merge_cells('B1:C1')
|
266
|
|
- ws.merge_cells('D1:E1')
|
267
|
|
- ws.merge_cells('G1:H1')
|
268
|
|
-
|
269
|
|
- # 设置列宽
|
270
|
|
- ws.column_dimensions['B'].width = 12.5
|
271
|
|
- ws.column_dimensions['C'].width = 12.5
|
272
|
|
- ws.column_dimensions['D'].width = 12.5
|
273
|
|
- ws.column_dimensions['E'].width = 12.5
|
274
|
|
- ws.column_dimensions['F'].width = 3
|
275
|
|
- ws.column_dimensions['F'].alignment = Alignment(horizontal='center', vertical='center') # 新增:设置F列居中对齐
|
276
|
|
- ws.column_dimensions['G'].width = 12.5
|
277
|
|
- ws.column_dimensions['H'].width = 12.5
|
278
|
|
- ws.column_dimensions['I'].width = 14
|
279
|
|
- ws.column_dimensions['J'].width = 10
|
280
|
|
-
|
281
|
|
- # 设置表头
|
282
|
|
- headers = [
|
283
|
|
- ("A2", "点名"),
|
284
|
|
- ("B2", "高斯坐标x(m)"),
|
285
|
|
- ("C2", "高斯坐标y(m)"),
|
286
|
|
- ("D2", "高斯坐标x(m)"),
|
287
|
|
- ("E2", "高斯坐标y(m)"),
|
288
|
|
- ("F2", "权"),
|
289
|
|
- ("G2", "高斯坐标x(m)"),
|
290
|
|
- ("H2", "高斯坐标y(m)"),
|
291
|
|
- ("I1", "平均边长"),
|
292
|
|
- ("I2", "方向值中误差"),
|
293
|
|
- ("I3", "总边数"),
|
294
|
|
- ("I4", "总方向数"),
|
295
|
|
- ("I5", "缩放值")
|
296
|
|
- ]
|
297
|
|
-
|
298
|
|
- for cell, value in headers:
|
299
|
|
- ws[cell] = value
|
300
|
|
- ws[cell].alignment = Alignment(horizontal='center', vertical='center')
|
301
|
|
-
|
302
|
|
- # 查询WD_Input_Point表中的数据
|
303
|
|
- query_point = """
|
304
|
|
- SELECT PointName, New_X, New_Y, Last_X, Last_Y, Wight, First_X, First_Y
|
305
|
|
- FROM WD_Input_Point
|
306
|
|
- WHERE TableName = ?
|
307
|
|
- """
|
308
|
|
- cursor.execute(query_point, (utf_en,))
|
309
|
|
- results_point = cursor.fetchall()
|
310
|
|
-
|
311
|
|
- # 创建一个样式来强制保留四位小数
|
312
|
|
- decimal_style = NamedStyle(name="decimal_style")
|
313
|
|
- decimal_style.number_format = '0000.0000'
|
314
|
|
-
|
315
|
|
- # 填充数据到Excel
|
316
|
|
- for idx, (point_name, new_x, new_y, last_x, last_y, wight, first_x, first_y) in enumerate(results_point, start=3):
|
317
|
|
- ws[f'A{idx}'] = point_name
|
318
|
|
- ws[f'B{idx}'] = round(new_x, 4)
|
319
|
|
- ws[f'C{idx}'] = round(new_y, 4)
|
320
|
|
- ws[f'D{idx}'] = round(last_x, 4)
|
321
|
|
- ws[f'E{idx}'] = round(last_y, 4)
|
322
|
|
- ws[f'F{idx}'] = round(wight, 0) # 新增
|
323
|
|
- ws[f'G{idx}'] = round(first_x, 4) # 新增
|
324
|
|
- ws[f'H{idx}'] = round(first_y, 4) # 新增
|
325
|
|
-
|
326
|
|
- # 应用样式以保留四位小数
|
327
|
|
- ws[f'B{idx}'].style = decimal_style
|
328
|
|
- ws[f'C{idx}'].style = decimal_style
|
329
|
|
- ws[f'D{idx}'].style = decimal_style
|
330
|
|
- ws[f'E{idx}'].style = decimal_style
|
331
|
|
- ws[f'G{idx}'].style = decimal_style # 新增
|
332
|
|
- ws[f'H{idx}'].style = decimal_style # 新增
|
|
50
|
+def export_combined_data(ui, db_path, utf_en, export_folder, file_name):
|
|
51
|
+ try:
|
|
52
|
+ # 解码文件名并去掉后缀名
|
|
53
|
+ decoded_utf_en = utf_en.decode('utf-8') if isinstance(utf_en, bytes) else utf_en
|
|
54
|
+ excel_path = os.path.join(export_folder, file_name)
|
|
55
|
+
|
|
56
|
+ # 创建一个新的工作簿
|
|
57
|
+ wb = openpyxl.Workbook()
|
|
58
|
+
|
|
59
|
+ # 创建三个Sheet
|
|
60
|
+ ws_initial = wb.create_sheet('原始数据')
|
|
61
|
+ ws_stability = wb.create_sheet('稳定性分析成果表')
|
|
62
|
+ ws_model = wb.create_sheet('改算模型')
|
|
63
|
+
|
|
64
|
+ # 删除默认的Sheet
|
|
65
|
+ ws_default = wb['Sheet']
|
|
66
|
+ wb.remove(ws_default)
|
|
67
|
+
|
|
68
|
+ # 连接到数据库
|
|
69
|
+ conn = sqlite3.connect(db_path)
|
|
70
|
+ cursor = conn.cursor()
|
|
71
|
+
|
|
72
|
+ # 查询WD_Input_Param表中的数据
|
|
73
|
+ query_param = """
|
|
74
|
+ SELECT New_ResultName, Last_ResultName, Avg_SL, Ms_Dir, SL_Count, Dir_Count, Scale_Value, First_ResultName
|
|
75
|
+ FROM WD_Input_Param
|
|
76
|
+ WHERE TableName = ?
|
|
77
|
+ """
|
|
78
|
+ cursor.execute(query_param, (utf_en,))
|
|
79
|
+ result_param = cursor.fetchone()
|
|
80
|
+
|
|
81
|
+ # 创建样式来保留指定的小数位数
|
|
82
|
+ decimal_style_3 = NamedStyle(name="decimal_style_3")
|
|
83
|
+ decimal_style_3.number_format = '0.0000'
|
|
84
|
+ decimal_style_3.alignment = Alignment(horizontal='center', vertical='center')
|
|
85
|
+
|
|
86
|
+ decimal_style_1 = NamedStyle(name="decimal_style_1")
|
|
87
|
+ decimal_style_1.number_format = '0.0'
|
|
88
|
+ decimal_style_1.alignment = Alignment(horizontal='center', vertical='center')
|
|
89
|
+
|
|
90
|
+ decimal_style_4 = NamedStyle(name="decimal_style_4")
|
|
91
|
+ decimal_style_4.number_format = '0'
|
|
92
|
+ decimal_style_4.alignment = Alignment(horizontal='center', vertical='center')
|
|
93
|
+
|
|
94
|
+ if result_param:
|
|
95
|
+ new_result_name, last_result_name, avg_sl, ms_dir, sl_count, dir_count, scale_value, first_result_name = result_param
|
|
96
|
+
|
|
97
|
+ # 填充数据到“原始数据”Sheet并应用样式
|
|
98
|
+ ws_initial['B1'] = new_result_name
|
|
99
|
+ ws_initial['B1'].alignment = Alignment(horizontal='center', vertical='center')
|
|
100
|
+
|
|
101
|
+ ws_initial['D1'] = last_result_name
|
|
102
|
+ ws_initial['D1'].alignment = Alignment(horizontal='center', vertical='center')
|
|
103
|
+
|
|
104
|
+ ws_initial['G1'] = first_result_name
|
|
105
|
+ ws_initial['G1'].alignment = Alignment(horizontal='center', vertical='center')
|
|
106
|
+
|
|
107
|
+ ws_initial['J1'] = avg_sl
|
|
108
|
+ ws_initial['J1'].style = decimal_style_3
|
|
109
|
+
|
|
110
|
+ ws_initial['J2'] = ms_dir
|
|
111
|
+ ws_initial['J2'].alignment = Alignment(horizontal='center', vertical='center')
|
|
112
|
+
|
|
113
|
+ ws_initial['J3'] = sl_count
|
|
114
|
+ ws_initial['J3'].style = decimal_style_4
|
|
115
|
+
|
|
116
|
+ ws_initial['J4'] = dir_count
|
|
117
|
+ ws_initial['J4'].style = decimal_style_4
|
|
118
|
+
|
|
119
|
+ ws_initial['J5'] = scale_value
|
|
120
|
+ ws_initial['J5'].style = decimal_style_4
|
|
121
|
+
|
|
122
|
+ # 合并单元格
|
|
123
|
+ ws_initial.merge_cells('B1:C1')
|
|
124
|
+ ws_initial.merge_cells('D1:E1')
|
|
125
|
+ ws_initial.merge_cells('G1:H1')
|
|
126
|
+
|
|
127
|
+ # 设置列宽
|
|
128
|
+ ws_initial.column_dimensions['B'].width = 12.5
|
|
129
|
+ ws_initial.column_dimensions['C'].width = 12.5
|
|
130
|
+ ws_initial.column_dimensions['D'].width = 12.5
|
|
131
|
+ ws_initial.column_dimensions['E'].width = 12.5
|
|
132
|
+ ws_initial.column_dimensions['F'].width = 3
|
|
133
|
+ ws_initial.column_dimensions['G'].width = 12.5
|
|
134
|
+ ws_initial.column_dimensions['H'].width = 12.5
|
|
135
|
+ ws_initial.column_dimensions['I'].width = 14
|
|
136
|
+ ws_initial.column_dimensions['J'].width = 10
|
|
137
|
+
|
|
138
|
+ # 设置表头
|
|
139
|
+ headers = [
|
|
140
|
+ ("A2", "点名"),
|
|
141
|
+ ("B2", "高斯坐标x(m)"),
|
|
142
|
+ ("C2", "高斯坐标y(m)"),
|
|
143
|
+ ("D2", "高斯坐标x(m)"),
|
|
144
|
+ ("E2", "高斯坐标y(m)"),
|
|
145
|
+ ("F2", "权"),
|
|
146
|
+ ("G2", "高斯坐标x(m)"),
|
|
147
|
+ ("H2", "高斯坐标y(m)"),
|
|
148
|
+ ("I1", "平均边长"),
|
|
149
|
+ ("I2", "方向值中误差"),
|
|
150
|
+ ("I3", "总边数"),
|
|
151
|
+ ("I4", "总方向数"),
|
|
152
|
+ ("I5", "缩放值")
|
|
153
|
+ ]
|
|
154
|
+
|
|
155
|
+ for cell, value in headers:
|
|
156
|
+ ws_initial[cell] = value
|
|
157
|
+ ws_initial[cell].alignment = Alignment(horizontal='center', vertical='center')
|
|
158
|
+
|
|
159
|
+ # 查询WD_Input_Point表中的数据
|
|
160
|
+ query_point = """
|
|
161
|
+ SELECT PointName, New_X, New_Y, Last_X, Last_Y, Wight, First_X, First_Y
|
|
162
|
+ FROM WD_Input_Point
|
|
163
|
+ WHERE TableName = ?
|
|
164
|
+ """
|
|
165
|
+ cursor.execute(query_point, (utf_en,))
|
|
166
|
+ results_point = cursor.fetchall()
|
|
167
|
+
|
|
168
|
+ # 创建一个样式来强制保留四位小数
|
|
169
|
+ decimal_style = NamedStyle(name="decimal_style")
|
|
170
|
+ decimal_style.number_format = '0000.0000'
|
|
171
|
+
|
|
172
|
+ # 填充数据到“原始数据”Sheet
|
|
173
|
+ for idx, (point_name, new_x, new_y, last_x, last_y, wight, first_x, first_y) in enumerate(results_point,
|
|
174
|
+ start=3):
|
|
175
|
+ ws_initial[f'A{idx}'] = point_name
|
|
176
|
+ ws_initial[f'B{idx}'] = round(new_x, 4)
|
|
177
|
+ ws_initial[f'C{idx}'] = round(new_y, 4)
|
|
178
|
+ ws_initial[f'D{idx}'] = round(last_x, 4)
|
|
179
|
+ ws_initial[f'E{idx}'] = round(last_y, 4)
|
|
180
|
+ ws_initial[f'F{idx}'] = round(wight, 0)
|
|
181
|
+ ws_initial[f'G{idx}'] = round(first_x, 4)
|
|
182
|
+ ws_initial[f'H{idx}'] = round(first_y, 4)
|
|
183
|
+
|
|
184
|
+ # 应用样式以保留四位小数
|
|
185
|
+ ws_initial[f'B{idx}'].style = decimal_style
|
|
186
|
+ ws_initial[f'C{idx}'].style = decimal_style
|
|
187
|
+ ws_initial[f'D{idx}'].style = decimal_style
|
|
188
|
+ ws_initial[f'E{idx}'].style = decimal_style
|
|
189
|
+ ws_initial[f'G{idx}'].style = decimal_style
|
|
190
|
+ ws_initial[f'H{idx}'].style = decimal_style
|
|
191
|
+
|
|
192
|
+ # 提取“稳定性分析成果表”数据
|
|
193
|
+ 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 = ?'
|
|
194
|
+ cursor.execute(sqlstr1, (utf_en,))
|
|
195
|
+ result1 = cursor.fetchall()
|
|
196
|
+ plist1 = Arrange_Data1(result1)
|
|
197
|
+
|
|
198
|
+ # 设置“稳定性分析成果表”列宽
|
|
199
|
+ ws_stability.column_dimensions['B'].width = 15
|
|
200
|
+ ws_stability.column_dimensions['C'].width = 15
|
|
201
|
+ ws_stability.column_dimensions['D'].width = 15
|
|
202
|
+ ws_stability.column_dimensions['E'].width = 15
|
|
203
|
+ ws_stability.column_dimensions['F'].width = 5
|
|
204
|
+ ws_stability.column_dimensions['G'].width = 15
|
|
205
|
+ ws_stability.column_dimensions['H'].width = 15
|
|
206
|
+ ws_stability.column_dimensions['I'].width = 5
|
|
207
|
+ ws_stability.column_dimensions['M'].width = 5
|
|
208
|
+ ws_stability.column_dimensions['Q'].width = 5
|
|
209
|
+ ws_stability.column_dimensions['J'].width = 8
|
|
210
|
+ ws_stability.column_dimensions['K'].width = 8
|
|
211
|
+ ws_stability.column_dimensions['L'].width = 8
|
|
212
|
+ ws_stability.column_dimensions['N'].width = 8
|
|
213
|
+ ws_stability.column_dimensions['O'].width = 8
|
|
214
|
+ ws_stability.column_dimensions['P'].width = 8
|
|
215
|
+
|
|
216
|
+ # 设置“稳定性分析成果表”表头
|
|
217
|
+ ws_stability.merge_cells(start_row=1, end_row=1, start_column=1, end_column=17)
|
|
218
|
+ ws_stability.cell(1, 1).value = '稳定性分析成果表'
|
|
219
|
+ ws_area = ws_stability["A1:Q2"]
|
|
220
|
+ alignment_center = Alignment(horizontal='center', vertical='center')
|
|
221
|
+ for i in ws_area:
|
|
222
|
+ for j in i:
|
|
223
|
+ j.alignment = alignment_center
|
|
224
|
+
|
|
225
|
+ alignment_right = Alignment(horizontal='right', vertical='center')
|
|
226
|
+ ws_stability.merge_cells(start_row=2, end_row=3, start_column=1, end_column=1)
|
|
227
|
+ ws_stability.cell(2, 1).value = '点号'
|
|
228
|
+
|
|
229
|
+ ws_stability.merge_cells(start_row=2, end_row=2, start_column=2, end_column=3)
|
|
230
|
+ ws_stability.cell(2, 2).value = plist1[0][17]
|
|
231
|
+
|
|
232
|
+ ws_stability.merge_cells(start_row=2, end_row=2, start_column=4, end_column=6)
|
|
233
|
+ ws_stability.cell(2, 4).value = plist1[0][18]
|
|
234
|
+
|
|
235
|
+ ws_stability.merge_cells(start_row=2, end_row=2, start_column=7, end_column=9)
|
|
236
|
+ ws_stability.cell(2, 7).value = plist1[0][19]
|
|
237
|
+
|
|
238
|
+ ws_stability.merge_cells(start_row=2, end_row=2, start_column=10, end_column=12)
|
|
239
|
+ ws_stability.cell(2, 10).value = '本期-首期(mm)'
|
|
240
|
+
|
|
241
|
+ ws_stability.merge_cells(start_row=2, end_row=3, start_column=13, end_column=13)
|
|
242
|
+ ws_stability.cell(2, 13).value = '变形判定'
|
|
243
|
+
|
|
244
|
+ ws_stability.merge_cells(start_row=2, end_row=2, start_column=14, end_column=16)
|
|
245
|
+ ws_stability.cell(2, 14).value = '本期-上期(mm)'
|
|
246
|
+
|
|
247
|
+ ws_stability.merge_cells(start_row=2, end_row=3, start_column=17, end_column=17)
|
|
248
|
+ ws_stability.cell(2, 17).value = '变形判定'
|
|
249
|
+
|
|
250
|
+ ws_stability.cell(2, 13).alignment = Alignment(wrap_text=True)
|
|
251
|
+ ws_stability.cell(2, 17).alignment = Alignment(wrap_text=True)
|
|
252
|
+
|
|
253
|
+ ws_stability.cell(3, 2).value = 'X(m)'
|
|
254
|
+ ws_stability.cell(3, 3).value = 'Y(m)'
|
|
255
|
+ ws_stability.cell(3, 4).value = 'X(m)'
|
|
256
|
+ ws_stability.cell(3, 5).value = 'Y(m)'
|
|
257
|
+ ws_stability.cell(3, 6).value = '权'
|
|
258
|
+ ws_stability.cell(3, 7).value = 'X(m)'
|
|
259
|
+ ws_stability.cell(3, 8).value = 'Y(m)'
|
|
260
|
+ ws_stability.cell(3, 9).value = '权'
|
|
261
|
+ ws_stability.cell(3, 10).value = '△X'
|
|
262
|
+ ws_stability.cell(3, 11).value = '△Y'
|
|
263
|
+ ws_stability.cell(3, 12).value = '△XY'
|
|
264
|
+ ws_stability.cell(3, 14).value = '△X'
|
|
265
|
+ ws_stability.cell(3, 15).value = '△Y'
|
|
266
|
+ ws_stability.cell(3, 16).value = '△XY'
|
|
267
|
+
|
|
268
|
+ row1 = 4
|
|
269
|
+ for data1 in plist1:
|
|
270
|
+ ws_stability.cell(row1, 1).value = data1[0]
|
|
271
|
+ ws_stability.cell(row1, 2).value = round(data1[1], 4)
|
|
272
|
+ ws_stability.cell(row1, 3).value = round(data1[2], 4)
|
|
273
|
+ ws_stability.cell(row1, 4).value = round(data1[3], 4)
|
|
274
|
+ ws_stability.cell(row1, 5).value = round(data1[4], 4)
|
|
275
|
+ ws_stability.cell(row1, 6).value = int(data1[5])
|
|
276
|
+ ws_stability.cell(row1, 7).value = round(data1[6], 4)
|
|
277
|
+ ws_stability.cell(row1, 8).value = round(data1[7], 4)
|
|
278
|
+ ws_stability.cell(row1, 9).value = int(data1[8])
|
|
279
|
+ ws_stability.cell(row1, 10).value = round(data1[9], 1)
|
|
280
|
+ ws_stability.cell(row1, 11).value = round(data1[10], 1)
|
|
281
|
+ ws_stability.cell(row1, 12).value = round(data1[11], 1)
|
|
282
|
+ if data1[12] == '稳定':
|
|
283
|
+ ws_stability.cell(row1, 13).value = ''
|
|
284
|
+ else:
|
|
285
|
+ ws_stability.cell(row1, 13).value = data1[12]
|
|
286
|
+ ws_stability.cell(row1, 14).value = round(data1[13], 1)
|
|
287
|
+ ws_stability.cell(row1, 15).value = round(data1[14], 1)
|
|
288
|
+ ws_stability.cell(row1, 16).value = round(data1[15], 1)
|
|
289
|
+ if data1[16] == '稳定':
|
|
290
|
+ ws_stability.cell(row1, 17).value = ''
|
|
291
|
+ else:
|
|
292
|
+ ws_stability.cell(row1, 17).value = data1[16]
|
|
293
|
+ row1 += 1
|
|
294
|
+
|
|
295
|
+ # 提取“改算模型”数据
|
|
296
|
+ sqlstr2 = 'select Last_ResultName,New_ResultName,Formula_X1,Formula_X2,Formula_X3,Formula_Y1,Formula_Y2,Formula_Y3 from WD_Result_Param WHERE TableName = ?'
|
|
297
|
+ cursor.execute(sqlstr2, (utf_en,))
|
|
298
|
+ result3 = cursor.fetchall()
|
|
299
|
+ newname = result3[0][1].decode('utf-8')
|
|
300
|
+ lastname = result3[0][0].decode('utf-8')
|
|
301
|
+
|
|
302
|
+ # 设置“改算模型”列宽
|
|
303
|
+ ws_model.column_dimensions['A'].width = 75
|
|
304
|
+
|
|
305
|
+ # 设置“改算模型”表头
|
|
306
|
+ ws_area = ws_model["A1:A5"]
|
|
307
|
+ alignment_center = Alignment(horizontal='left', vertical='center')
|
|
308
|
+ for i in ws_area:
|
|
309
|
+ for j in i:
|
|
310
|
+ j.alignment = alignment_center
|
|
311
|
+
|
|
312
|
+ # 填充“改算模型”数据
|
|
313
|
+ str1 = newname + '--' + lastname + '已知系统转换公式:'
|
|
314
|
+ ws_model.cell(1, 1).value = str1
|
|
315
|
+ str2 = 'X=(' + str(round(result3[0][2], 14)) + ')·x+(' + str(round(result3[0][3], 14)) + ')·y+(' + str(
|
|
316
|
+ round(result3[0][4], 11)) + ')'
|
|
317
|
+ ws_model.cell(2, 1).value = str2
|
|
318
|
+ str3 = 'Y=(' + str(round(result3[0][5], 14)) + ')·x+(' + str(round(result3[0][6], 14)) + ')·y+(' + str(
|
|
319
|
+ round(result3[0][7], 11)) + ')'
|
|
320
|
+ ws_model.cell(3, 1).value = str3
|
|
321
|
+ str4 = '式中:x、y为' + newname
|
|
322
|
+ ws_model.cell(4, 1).value = str4
|
|
323
|
+ str5 = ' X、Y为' + lastname + '已知系统的' + newname + '归算坐标'
|
|
324
|
+ ws_model.cell(5, 1).value = str5
|
|
325
|
+
|
|
326
|
+ # 保存工作簿
|
|
327
|
+ wb.save(excel_path)
|
|
328
|
+
|
|
329
|
+ QMessageBox.information(ui, '成功', f'数据文件已导出到 {export_folder}')
|
333
|
330
|
|
334
|
|
- # 保存工作簿
|
335
|
|
- wb.save(excel_path)
|
|
331
|
+ except PermissionError as e:
|
|
332
|
+ if e.errno == 13:
|
|
333
|
+ QMessageBox.critical(ui, '错误', '请确认文件没有被其他程序(如Excel、文本编辑器等)打开')
|
|
334
|
+ else:
|
|
335
|
+ QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
|
336
|
+ except Exception as e:
|
|
337
|
+ QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
336
|
338
|
|
337
|
339
|
|
338
|
|
-def export_example_data(ui, db_path, utf_en, export_folder,file_name):
|
|
340
|
+def export_example_data(ui, db_path, utf_en, export_folder, file_name):
|
339
|
341
|
# 解码文件名并去掉后缀名
|
340
|
342
|
decoded_utf_en = utf_en.decode('utf-8') if isinstance(utf_en, bytes) else utf_en
|
341
|
343
|
# excel_file_name = f"{os.path.splitext(decoded_utf_en)[0]}.xlsx"
|
|
@@ -472,51 +474,16 @@ def export_example_data(ui, db_path, utf_en, export_folder,file_name):
|
472
|
474
|
# 保存工作簿
|
473
|
475
|
wb.save(excel_path)
|
474
|
476
|
|
475
|
|
-# 主函数 写入excel文件
|
476
|
|
-def main_function(ui, dbpath, excelname,export_folder,file_name):
|
477
|
|
- # # 获取应用的安装目录
|
478
|
|
- # app_install_dir = os.getcwd() # 假设脚本文件位于应用的安装目录下
|
479
|
|
- # export_folder = os.path.join(app_install_dir, 'Export')
|
480
|
|
- #
|
481
|
|
- # # 如果 Export 文件夹不存在,则创建它
|
482
|
|
- # if not os.path.exists(export_folder):
|
483
|
|
- # os.makedirs(export_folder)
|
484
|
|
- try:
|
485
|
|
- openpyxl_write(export_folder, dbpath, excelname,file_name)
|
486
|
|
- QMessageBox.information(ui, '成功', f'成果文件已成功导出到 {export_folder}')
|
487
|
|
- except Exception as e:
|
488
|
|
- QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
489
|
477
|
|
|
478
|
+# 数据文件的导出
|
|
479
|
+def main_function_combined(ui, dbpath, excelname, export_folder, file_name):
|
|
480
|
+ export_combined_data(ui, dbpath, excelname, export_folder, file_name)
|
490
|
481
|
|
491
|
|
-def main_function_initial(ui, dbpath, excelname_utf8,export_folder,file_name):
|
492
|
|
- # # 获取应用的安装目录
|
493
|
|
- # app_install_dir = os.getcwd() # 假设脚本文件位于应用的安装目录下
|
494
|
|
- # export_folder = os.path.join(app_install_dir, 'Export')
|
495
|
|
- #
|
496
|
|
- # # 如果 Export 文件夹不存在,则创建它
|
497
|
|
- # if not os.path.exists(export_folder):
|
498
|
|
- # os.makedirs(export_folder)
|
499
|
|
- try:
|
500
|
|
- export_initial_data(ui, dbpath, excelname_utf8, export_folder,file_name)
|
501
|
|
- QMessageBox.information(ui, '成功', f'初始文件已成功导出到 {export_folder}')
|
502
|
|
- except PermissionError as e:
|
503
|
|
- if e.errno == 13:
|
504
|
|
- QMessageBox.critical(ui, '错误', '请确认文件没有被其他程序(如Excel、文本编辑器等)打开')
|
505
|
|
- else:
|
506
|
|
- QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
507
|
|
- except Exception as e:
|
508
|
|
- QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
509
|
482
|
|
510
|
|
-def main_function_example(ui, dbpath, excelname_utf8,export_folder,file_name):
|
511
|
|
- # # 获取应用的安装目录
|
512
|
|
- # app_install_dir = os.getcwd() # 假设脚本文件位于应用的安装目录下
|
513
|
|
- # export_folder = os.path.join(app_install_dir, 'Example')
|
514
|
|
- #
|
515
|
|
- # # 如果 Export 文件夹不存在,则创建它
|
516
|
|
- # if not os.path.exists(export_folder):
|
517
|
|
- # os.makedirs(export_folder)
|
|
483
|
+# 示例文件的导出
|
|
484
|
+def main_function_example(ui, dbpath, excelname_utf8, export_folder, file_name):
|
518
|
485
|
try:
|
519
|
|
- export_example_data(ui, dbpath, excelname_utf8, export_folder,file_name)
|
|
486
|
+ export_example_data(ui, dbpath, excelname_utf8, export_folder, file_name)
|
520
|
487
|
QMessageBox.information(ui, '成功', f'示例文件已成功导出到 {export_folder}')
|
521
|
488
|
except PermissionError as e:
|
522
|
489
|
if e.errno == 13:
|
|
@@ -524,4 +491,4 @@ def main_function_example(ui, dbpath, excelname_utf8,export_folder,file_name):
|
524
|
491
|
else:
|
525
|
492
|
QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
526
|
493
|
except Exception as e:
|
527
|
|
- QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|
|
494
|
+ QMessageBox.critical(ui, '错误', f'导出过程中发生错误: {str(e)}')
|