결과 엑셀 A~C 열 너비 자동 조절
콘텐츠 길이에 맞춰 열 너비를 계산해서 적용한다. 한글은 ASCII 폭의 약 2배로 가중치를 두고, 최소 10 · 최대 60 으로 클램프해 너무 좁거나 넓지 않게 한다. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -816,9 +816,30 @@ def upload_file(
|
||||
df_out = pd.DataFrame(excel_rows, columns=["상품코드[필수]", "가용수량", "불용수량"])
|
||||
|
||||
# 엑셀 파일 쓰기 (1행 헤더, 2행부터 데이터 — pandas to_excel 기본 동작)
|
||||
# 작성 직후 A~C 열 너비를 콘텐츠 길이에 맞춰 자동 조절한다.
|
||||
# (한글은 ASCII보다 폭이 약 2배이므로 가중치 적용)
|
||||
def _excel_display_len(value) -> int:
|
||||
s = "" if value is None else str(value)
|
||||
width = 0
|
||||
for ch in s:
|
||||
width += 2 if ord(ch) > 127 else 1
|
||||
return width
|
||||
|
||||
excel_io = io.BytesIO()
|
||||
with pd.ExcelWriter(excel_io, engine='openpyxl') as writer:
|
||||
df_out.to_excel(writer, index=False, sheet_name="발주")
|
||||
worksheet = writer.sheets["발주"]
|
||||
from openpyxl.utils import get_column_letter
|
||||
for col_idx, col_name in enumerate(df_out.columns, start=1):
|
||||
header_w = _excel_display_len(col_name)
|
||||
data_w = max(
|
||||
(_excel_display_len(v) for v in df_out[col_name].values),
|
||||
default=0,
|
||||
)
|
||||
# 최소 10, 최대 60 으로 클램프 + 여백 2
|
||||
worksheet.column_dimensions[get_column_letter(col_idx)].width = (
|
||||
min(60, max(10, max(header_w, data_w) + 2))
|
||||
)
|
||||
excel_io.seek(0)
|
||||
|
||||
# 6. 다운로드 파일명: "MM월 DD일 (요일)_발주_(낱개 상품 출고).xls"
|
||||
|
||||
Reference in New Issue
Block a user