| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- # -*- 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()
|