From 84d266ea8979436f6fbfe1c080caca49f9c8888b Mon Sep 17 00:00:00 2001 From: king Date: Fri, 12 Jun 2026 11:12:31 +0900 Subject: [PATCH] =?UTF-8?q?style(malaysia):=20=EC=9E=85=EC=B6=9C=EA=B3=A0?= =?UTF-8?q?=20=EC=97=91=EC=85=80=20=ED=97=A4=EB=8D=94=20=EC=84=9C=EC=8B=9D?= =?UTF-8?q?=20+=20=EC=97=B4=EB=84=88=EB=B9=84=20=EC=9E=90=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - A1~C1 파랑 배경/흰색 굵은글씨/가운데 정렬 - A~C 열너비 내용 길이 자동(한글 폭 2배 보정, 8~50 clamp) Co-Authored-By: Claude Opus 4.8 --- app/modules/malaysia/router.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/app/modules/malaysia/router.py b/app/modules/malaysia/router.py index 3b781c8..c8cba18 100644 --- a/app/modules/malaysia/router.py +++ b/app/modules/malaysia/router.py @@ -335,11 +335,14 @@ async def movements_export(request: Request) -> StreamingResponse: item_names = st.item_name_map() from openpyxl import Workbook # noqa: WPS433 + from openpyxl.styles import Alignment, Font, PatternFill # noqa: WPS433 + from openpyxl.utils import get_column_letter # noqa: WPS433 wb = Workbook() ws = wb.active ws.title = f"{mtype}_{mdate}" - ws.append(["사방넷코드", "수량", "이름"]) + header = ["사방넷코드", "수량", "이름"] + ws.append(header) for code in sorted(totals.keys()): qty = totals[code] if qty == 0: @@ -350,6 +353,26 @@ async def movements_export(request: Request) -> StreamingResponse: names.get(code) or item_names.get(code) or code, ]) + # 제목행(A1~C1): 파랑 배경 + 흰색 굵은글씨 + 가운데 정렬 + fill = PatternFill(start_color="FF4472C4", end_color="FF4472C4", fill_type="solid") + font = Font(color="FFFFFFFF", bold=True) + center = Alignment(horizontal="center", vertical="center") + for col in range(1, len(header) + 1): + cell = ws.cell(row=1, column=col) + cell.fill = fill + cell.font = font + cell.alignment = center + + # 열너비 자동(내용 길이 기준, 한글 폭 보정). 최소 8 ~ 최대 50. + for col in range(1, len(header) + 1): + letter = get_column_letter(col) + longest = 0 + for cell in ws[letter]: + v = "" if cell.value is None else str(cell.value) + width = sum(2 if ord(ch) > 0x1100 else 1 for ch in v) + longest = max(longest, width) + ws.column_dimensions[letter].width = max(8, min(50, longest + 2)) + buf = io.BytesIO() wb.save(buf) buf.seek(0)