from openpyxl import Workbook, load_workbook from openpyxl.styles import Alignment, Border, Font, PatternFill, Side from openpyxl.utils import get_column_letter OUTPUT = "outputs/screenshot_process_table/小程序上线流程表.xlsx" headers = ["阶段", "任务", "产出物", "负责人", "建议时长"] rows = [ ["需求与原型", "需求澄清、功能清单、原型评审", "PRD、原型图", "产品", "2~3天"], ["UI设计", "界面设计、切图标注", "设计稿、切图", "UI", "3~4天"], ["开发", "前端+后端联调、自测", "代码包", "前端/后端", "6~8天"], ["测试与修复", "功能测试、兼容性、回归", "测试报告", "测试", "3~4天"], ["小程序提审", "提交代码、填写审核信息", "审核中", "产品/运营", "1~7天(官方不等)"], ["发布上线", "审核通过后全量/灰度发布", "线上版本", "产品/运营", "1天"], ] wb = Workbook() ws = wb.active ws.title = "流程表" ws.append(headers) for row in rows: ws.append(row) header_fill = PatternFill("solid", fgColor="F3F6FA") grid = Side(style="thin", color="D9DEE7") border = Border(bottom=grid) for cell in ws[1]: cell.font = Font(name="Arial", bold=True, size=12, color="111827") cell.fill = header_fill cell.alignment = Alignment(horizontal="left", vertical="center") cell.border = border for row in ws.iter_rows(min_row=2, max_row=ws.max_row): for cell in row: cell.font = Font(name="Arial", size=11, color="111827") cell.alignment = Alignment(horizontal="left", vertical="center", wrap_text=True) cell.border = border widths = { "A": 16, "B": 34, "C": 22, "D": 16, "E": 22, } for col, width in widths.items(): ws.column_dimensions[col].width = width for row_idx in range(1, ws.max_row + 1): ws.row_dimensions[row_idx].height = 28 ws.freeze_panes = "A2" ws.auto_filter.ref = f"A1:{get_column_letter(ws.max_column)}{ws.max_row}" wb.save(OUTPUT) check = load_workbook(OUTPUT) sheet = check["流程表"] assert sheet.max_row == 7 assert sheet.max_column == 5 assert sheet["A2"].value == "需求与原型" assert sheet["E6"].value == "1~7天(官方不等)" print(OUTPUT)