From aae7e396917d6668d6b4bc7c386537c3926539ca Mon Sep 17 00:00:00 2001 From: ulleo Date: Tue, 5 Aug 2025 15:34:52 +0800 Subject: [PATCH] feat: export excel --- backend/apps/chat/api/chat.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/backend/apps/chat/api/chat.py b/backend/apps/chat/api/chat.py index 95dbfcdd..925eec9d 100644 --- a/backend/apps/chat/api/chat.py +++ b/backend/apps/chat/api/chat.py @@ -1,3 +1,4 @@ +import asyncio import datetime import hashlib import io @@ -195,20 +196,21 @@ async def analysis_or_predict(session: SessionDep, current_user: CurrentUser, ch @router.post("/excel/export") async def export_excel(excel_data: ExcelData): - _fields_list = [] - data = [] - for _data in excel_data.data: - _row = [] + def inner(): + _fields_list = [] + data = [] + for _data in excel_data.data: + _row = [] + for field in excel_data.axis: + _row.append(_data.get(field.value)) + data.append(_row) for field in excel_data.axis: - _row.append(_data.get(field.value)) - data.append(_row) - for field in excel_data.axis: - _fields_list.append(field.name) - df = pd.DataFrame(np.array(data), columns=_fields_list) + _fields_list.append(field.name) + df = pd.DataFrame(np.array(data), columns=_fields_list) - buffer = io.BytesIO() - df.to_excel(buffer, index=False) - buffer.seek(0) - - return StreamingResponse(io.BytesIO(buffer.getvalue()), - media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") + buffer = io.BytesIO() + df.to_excel(buffer, index=False) + buffer.seek(0) + return io.BytesIO(buffer.getvalue()) + result = await asyncio.to_thread(inner) + return StreamingResponse(result, media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")