diff --git a/data/2026-06-08/cleaned/危大方案编审进度看板.pptx b/data/2026-06-08/cleaned/危大方案编审进度看板.pptx index 2289310..19cfeed 100644 Binary files a/data/2026-06-08/cleaned/危大方案编审进度看板.pptx and b/data/2026-06-08/cleaned/危大方案编审进度看板.pptx differ diff --git a/src/gen_pptx.py b/src/gen_pptx.py index 2f06cb4..b9811ca 100644 --- a/src/gen_pptx.py +++ b/src/gen_pptx.py @@ -43,6 +43,15 @@ def kpi(l,t,w,h,num,lbl,nc=BLUE,ns=44,ls=9): T(l,t+Inches(0.06),w,Inches(0.5),str(num),sz=ns,clr=nc,b=True,al=PP_ALIGN.CENTER) T(l,t+Inches(0.55),w,Inches(0.18),lbl,sz=ls,clr=GRAY,al=PP_ALIGN.CENTER) +def warn_card(l,t,w,h,num,lbl,dot_color=RED,ns=28): + """预警卡片:色球+数字+标签""" + R(l,t,w,h,fill=BG) + # 色球 (circle) + s=prs.slides[-1].shapes.add_shape(MSO_SHAPE.OVAL,l+Inches(0.25),t+Inches(0.04),Inches(0.22),Inches(0.22)) + s.fill.solid(); s.fill.fore_color.rgb=dot_color; s.line.fill.background() + T(l,t+Inches(0.26),w,Inches(0.28),str(num),sz=ns,clr=dot_color,b=True,al=PP_ALIGN.CENTER) + T(l,t+Inches(0.55),w,Inches(0.18),lbl,sz=8,clr=GRAY,al=PP_ALIGN.CENTER) + def donut(l,t,w,h,vals,labels,colors): """原生饼图""" cd=CategoryChartData() @@ -133,19 +142,23 @@ CARD_W=Inches(0.85); CARD_H=Inches(0.7); CARD_GAP=Inches(0.08) CY=RY2+Inches(0.48) warn_data=[ - ('5', '预警总计', RED, 36), - ('0', '红色🔴', RED, 28), - ('1', '橙色🟠', RED, 28), - ('4', '黄色🟡', GOLD, 28), - ('23', '未完成审批', GRAY, 28), + ('5', '预警总计', RED, 36, None), + ('0', '红色', RED, 28, RED), + ('1', '橙色', RED, 28, RGBColor(0xF0,0x80,0x00)), + ('4', '黄色', GOLD, 28, GOLD), + ('23', '未完成审批', GRAY, 28, None), ] -for idx,(num,lbl,clr,ns) in enumerate(warn_data): +for idx,(num,lbl,clr,ns,dot) in enumerate(warn_data): cx=MX2+Inches(0.12)+Inches(idx*(CARD_W+CARD_GAP)) - kpi(cx,CY,CARD_W,CARD_H,num,lbl,nc=clr,ns=ns,ls=8) + if dot: + warn_card(cx,CY,CARD_W,CARD_H,num,lbl,dot_color=dot,ns=ns) + else: + kpi(cx,CY,CARD_W,CARD_H,num,lbl,nc=clr,ns=ns,ls=8) -# Legend right-aligned -T(MX2+Inches(4.9),CY+Inches(0.05),Inches(1.0),Inches(0.65), - '🔴 在实施未审批\n🟠 ≤30天\n🟡 ≤45天',sz=7,clr=GRAY,al=PP_ALIGN.RIGHT) +# Legend with colored rects +for j,(txt,clr) in enumerate([('在实施未审批',RED),('≤30天',RGBColor(0xF0,0x80,0x00)),('≤45天',GOLD)]): + R(MX2+Inches(4.95),CY+Inches(0.05+j*0.18),Inches(0.12),Inches(0.12),fill=clr) + T(MX2+Inches(5.1),CY+Inches(0.04+j*0.18),Inches(0.8),Inches(0.15),txt,sz=7,clr=GRAY) # Row 2: 审批率 + 进度条 PY=RY2+Inches(1.3)