fix: 两表全改原生PPTX表格 + 列字体微调

This commit is contained in:
大师 2026-06-09 02:48:41 +08:00
parent dd881d82eb
commit f86a2a8a82
2 changed files with 40 additions and 29 deletions

View File

@ -156,22 +156,28 @@ R(MX2+Inches(1.2),PY+Inches(0.08),Inches(3.6*0.56),Inches(0.18),fill=BLUE)
T(MX2+Inches(1.2),PY+Inches(0.28),Inches(3.6),Inches(0.18),
'已审批 29 未审批 23 / 总计 52',sz=7,clr=GRAY)
# Unregistered detail
# Unregistered detail (native table)
UDY=RY2+Inches(1.85)+Inches(0.12)
R(Inches(0.5),UDY,Inches(12.333),Inches(0.72),fill=WHITE,line=RGBColor(0xDB,0xE2,0xEA))
R(Inches(0.5),UDY,Inches(12.333),Inches(0.82),fill=WHITE,line=RGBColor(0xDB,0xE2,0xEA))
R(Inches(0.5),UDY,Inches(12.333),Inches(0.28),fill=BLUE)
T(Inches(0.7),UDY+Inches(0.02),Inches(10),Inches(0.24),'登记率未达100%的项目认定→OA',sz=10,clr=WHITE,b=True)
# Table header
R(Inches(0.5),UDY+Inches(0.28),Inches(7.0),Inches(0.22),fill=BG)
T(Inches(0.55),UDY+Inches(0.28),Inches(6.9),Inches(0.22),'项目名称',sz=9,clr=BLUE,b=True)
for col,(w,label) in enumerate([(Inches(1.5),'认定'),(Inches(1.5),'OA'),(Inches(1.5),'缺口')],1):
R(Inches(7.5)+(col-1)*Inches(1.5),UDY+Inches(0.28),w,Inches(0.22),fill=BG)
T(Inches(7.55)+(col-1)*Inches(1.5),UDY+Inches(0.28),Inches(1.4),Inches(0.22),label,sz=9,clr=BLUE,b=True,al=PP_ALIGN.CENTER)
# Data row
T(Inches(0.55),UDY+Inches(0.50),Inches(6.9),Inches(0.22),'阿联酋阿布扎比马斯努阿岛水工项目',sz=9)
T(Inches(7.55),UDY+Inches(0.50),Inches(1.4),Inches(0.22),'2',sz=10,clr=BLUE,b=True,al=PP_ALIGN.CENTER)
T(Inches(9.05),UDY+Inches(0.50),Inches(1.4),Inches(0.22),'0',sz=10,clr=RED,b=True,al=PP_ALIGN.CENTER)
T(Inches(10.55),UDY+Inches(0.50),Inches(1.4),Inches(0.22),'2',sz=10,clr=RED,b=True,al=PP_ALIGN.CENTER)
tbl=s1.shapes.add_table(2,4,Inches(0.5),UDY+Inches(0.28),Inches(12.333),Inches(0.48))
tbl.table.columns[0].width=Inches(7.5)
tbl.table.columns[1].width=Inches(1.5)
tbl.table.columns[2].width=Inches(1.5)
tbl.table.columns[3].width=Inches(1.833)
for i,(h,al) in enumerate([('项目名称',PP_ALIGN.LEFT),('认定',PP_ALIGN.CENTER),('OA',PP_ALIGN.CENTER),('缺口',PP_ALIGN.CENTER)]):
c=tbl.table.cell(0,i); c.text=h
c.fill.solid(); c.fill.fore_color.rgb=BG
for p in c.text_frame.paragraphs: p.font.size=Pt(9); p.font.bold=True; p.font.color.rgb=BLUE; p.alignment=al
for i,val in enumerate(['阿联酋阿布扎比马斯努阿岛水工项目','2','0','2']):
c=tbl.table.cell(1,i); c.text=val
for p in c.text_frame.paragraphs:
p.font.size=Pt(9)
p.font.color.rgb=RED if val=='0' else BLUE
p.font.bold=i>0
p.alignment=PP_ALIGN.CENTER if i>0 else PP_ALIGN.LEFT
# Footer
R(Inches(0),Inches(7.18),Inches(13.333),Inches(0.32),fill=RGBColor(0xF5,0xF6,0xF8))
@ -200,29 +206,34 @@ warnings=[
('🟡','阿联酋迪拜马克图姆国际机场地下结构工程','T梁预制运输安装(4包)','已添加未实施','42天'),
]
# Table header
TY=Inches(1.1); TH=Inches(0.32)
# Native table: 6 rows × 5 cols (1 header + 5 data)
TY=Inches(1.1)
CW=[Inches(0.6),Inches(3.8),Inches(3.0),Inches(2.2),Inches(1.0)]
HDS=['信号','项目名称','方案名称','当前状态','距开工']
x_off=Inches(0.5)
for i,(h,w) in enumerate(zip(HDS,CW)):
R(x_off+sum(CW[:i]),TY,w,TH,fill=BLUE)
T(x_off+Inches(0.05)+sum(CW[:i]),TY+Inches(0.02),w-Inches(0.1),Inches(0.28),h,sz=10,clr=WHITE,b=True)
tbl2=s2.shapes.add_table(6,5,x_off,TY,sum(CW),Inches(6*0.38))
for i,w in enumerate(CW): tbl2.table.columns[i].width=w
for i,h in enumerate(HDS):
c=tbl2.table.cell(0,i); c.text=h
c.fill.solid(); c.fill.fore_color.rgb=BLUE
for p in c.text_frame.paragraphs: p.font.size=Pt(10); p.font.bold=True; p.font.color.rgb=WHITE
for j,(icon,proj,scheme,status,days) in enumerate(warnings):
y=TY+TH+Inches(j*0.38)
row=j+1; vals=[icon,proj,scheme,status,days]
bg_c=BG if j%2==0 else WHITE
R(x_off,y,sum(CW),Inches(0.38),fill=bg_c)
T(x_off+Inches(0.05),y+Inches(0.04),Inches(0.5),Inches(0.3),icon,sz=16,al=PP_ALIGN.CENTER)
T(x_off+CW[0],y+Inches(0.04),CW[1]-Inches(0.1),Inches(0.3),proj,sz=10)
T(x_off+CW[0]+CW[1],y+Inches(0.04),CW[2]-Inches(0.1),Inches(0.3),scheme,sz=10)
T(x_off+CW[0]+CW[1]+CW[2],y+Inches(0.04),CW[3]-Inches(0.1),Inches(0.3),status,sz=10)
T(x_off+sum(CW[:4]),y+Inches(0.04),CW[4]-Inches(0.1),Inches(0.3),days,sz=11,clr=RED,b=True,al=PP_ALIGN.RIGHT)
for i,val in enumerate(vals):
c=tbl2.table.cell(row,i); c.text=val
c.fill.solid(); c.fill.fore_color.rgb=bg_c
for p in c.text_frame.paragraphs:
p.font.size=Pt({0:16,1:9,4:11}.get(i,10))
p.font.color.rgb=RED if i==4 else BLACK
p.font.bold=(i==4)
p.alignment=PP_ALIGN.CENTER if i in (0,4) else PP_ALIGN.LEFT
# Rule
R(x_off,TY+TH+Inches(5*0.38+0.2),sum(CW),Inches(0.45),fill=BG)
R(x_off,TY+TH+Inches(5*0.38+0.2),Inches(0.06),Inches(0.45),fill=GOLD)
T(x_off+Inches(0.2),TY+TH+Inches(5*0.38+0.25),Inches(11),Inches(0.35),
RY=TY+Inches(6*0.38+0.15)
R(x_off,RY,sum(CW),Inches(0.45),fill=BG)
R(x_off,RY,Inches(0.06),Inches(0.45),fill=GOLD)
T(x_off+Inches(0.2),RY+Inches(0.05),Inches(11),Inches(0.35),
'📐 预警规则:🟠 橙色 ≤30天未审批 · 🟡 黄色 ≤45天未审批 · 🔴 红色 在实施未审批本月0项',sz=10,clr=BLACK)
R(Inches(0),Inches(7.18),Inches(13.333),Inches(0.32),fill=RGBColor(0xF5,0xF6,0xF8))