From dd7265ff4f532470f15180fd9a561fb673747581 Mon Sep 17 00:00:00 2001 From: dmy Date: Sun, 4 Jan 2026 18:40:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AF=BC=E5=87=BA=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E6=97=B6=E8=87=AA=E5=8A=A8=E5=8C=85=E5=90=AB?= =?UTF-8?q?Excel=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gui.py | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/gui.py b/gui.py index 534b75b..126fd57 100644 --- a/gui.py +++ b/gui.py @@ -11,6 +11,7 @@ from main import ( load_data_from_excel, generate_wind_farm_data, visualize_design, + export_all_scenarios_to_excel, ) import pandas as pd @@ -229,11 +230,44 @@ def index(): import zipfile - zip_filename = "all_designs.zip" + # 1. 确定文件名 + zip_filename = "all_designs_result.zip" + excel_result_name = "wind_farm_design_result.xlsx" + + # 推断 main.py 生成的原始 Excel 路径 + generated_excel_path = "wind_farm_design.xlsx" + + if state.get("original_filename"): + name_no_ext = os.path.splitext(state["original_filename"])[0] + zip_filename = f"{name_no_ext}_result.zip" + excel_result_name = f"{name_no_ext}_result.xlsx" + + if state.get("excel_path"): + dir_name = os.path.dirname(state["excel_path"]) + generated_excel_path = os.path.join( + dir_name, f"{name_no_ext}_design.xlsx" + ) + try: with zipfile.ZipFile( zip_filename, "w", zipfile.ZIP_DEFLATED ) as zipf: + # 2. 添加 Excel 结果表 + if os.path.exists(generated_excel_path): + zipf.write(generated_excel_path, arcname=excel_result_name) + else: + # 尝试重新生成 + try: + temp_excel = "temp_export.xlsx" + export_all_scenarios_to_excel( + state["results"], temp_excel + ) + zipf.write(temp_excel, arcname=excel_result_name) + os.remove(temp_excel) + except Exception as e: + print(f"生成Excel失败: {e}") + + # 3. 添加所有 DXF for res in state["results"]: safe_name = "".join( [ @@ -255,7 +289,7 @@ def index(): except: pass ui.download(zip_filename) - ui.notify("已导出所有方案", type="positive") + ui.notify("已导出所有方案 (含Excel)", type="positive") except Exception as ex: ui.notify(f"导出失败: {ex}", type="negative")