# -*- coding: utf-8 -*- """把 API清单.xlsx 按 module 拆成四个 sheet(admin / store / api / timer)。 - 保留原 9 列与行序; - 表头加粗、冻结首行、自动筛选、列宽与自动换行; - 原文件先备份到 backup/API清单-原始.xlsx。 """ import shutil from pathlib import Path import openpyxl from openpyxl.styles import Alignment, Border, Font, PatternFill, Side from openpyxl.utils import get_column_letter ROOT = Path(__file__).resolve().parents[1] SRC = ROOT / "API清单.xlsx" BACKUP = ROOT / "backup" / "API清单-原始.xlsx" SHEETS = [("admin", "管理端"), ("store", "商家端"), ("api", "客户端"), ("timer", "定时任务")] WIDTHS = [10, 18, 18, 16, 24, 44, 18, 26, 8] HEAD_FILL = PatternFill("solid", fgColor="1F3864") HEAD_FONT = Font(name="微软雅黑", size=10, bold=True, color="FFFFFF") BODY_FONT = Font(name="微软雅黑", size=10) THIN = Side(style="thin", color="D9D9D9") BORDER = Border(left=THIN, right=THIN, top=THIN, bottom=THIN) def main(): src_wb = openpyxl.load_workbook(SRC) src_ws = src_wb["API清单"] rows = list(src_ws.iter_rows(values_only=True)) header, data = rows[0], [r for r in rows[1:] if any(v is not None for v in r)] BACKUP.parent.mkdir(parents=True, exist_ok=True) shutil.copy2(SRC, BACKUP) wb = openpyxl.Workbook() wb.remove(wb.active) for module, label in SHEETS: subset = [r for r in data if r[0] == module] ws = wb.create_sheet("%s-%s" % (module, label)) ws.append(header) for r in subset: ws.append(list(r)) for c in range(1, len(header) + 1): cell = ws.cell(row=1, column=c) cell.fill = HEAD_FILL cell.font = HEAD_FONT cell.alignment = Alignment(horizontal="center", vertical="center") cell.border = BORDER ws.column_dimensions[get_column_letter(c)].width = WIDTHS[c - 1] ws.row_dimensions[1].height = 24 for row in ws.iter_rows(min_row=2, max_row=ws.max_row, max_col=len(header)): for cell in row: cell.font = BODY_FONT cell.border = BORDER col = cell.column if col in (7, 8): cell.alignment = Alignment(vertical="top", wrap_text=True) elif col == 9: cell.alignment = Alignment(horizontal="center", vertical="top") else: cell.alignment = Alignment(vertical="center") ws.freeze_panes = "A2" ws.auto_filter.ref = "A1:%s%d" % (get_column_letter(len(header)), max(ws.max_row, 1)) print("%-14s %d 条" % (ws.title, len(subset))) wb.save(SRC) print("已保存:", SRC) print("原文件备份:", BACKUP) if __name__ == "__main__": main()