From 33279f79f295f5e4f217081ce6c0001bec633e67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E5=B8=88?= Date: Tue, 9 Jun 2026 04:43:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AD=97=E5=B9=95=E8=A1=8C=E5=8E=BB?= =?UTF-8?q?=E9=99=A4=3D=E5=89=8D=E7=BC=80=E9=81=BF=E5=85=8DWPS=E8=AF=AF?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E4=B8=BA=E5=85=AC=E5=BC=8F=E5=AF=BC=E8=87=B4?= =?UTF-8?q?@GROUPBY?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cleaned/危大方案看板数据工作簿.xlsx | Bin 70115 -> 70123 bytes src/gen_workbook.py | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/data/2026-06-08/cleaned/危大方案看板数据工作簿.xlsx b/data/2026-06-08/cleaned/危大方案看板数据工作簿.xlsx index 7635feec875051924bda540c6ebe9b9a2d455362..75e73a8a30e3a69af0289961273a98bab1017d27 100644 GIT binary patch delta 4550 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 N9e~l*GXr4A{{d06`UL<0 delta 4502 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"none","无预警")').font=GRAY_F +s9.merge_cells('A2:C2'); s9.cell(2,1,'FILTER(有效≥2026!A3:AD200,有效≥2026!AD3:AD200<>"none","无预警")').font=GRAY_F s9.cell(4,1,f'=FILTER({REF}!A3:AD200,{REF}!AD3:AD200<>"none","🎉 无预警项")').font=FORMULA_F; s9.cell(4,1).border=BORDER for w,c in zip([22],'A'): s9.column_dimensions[c].width=w s9.merge_cells('A10:C10'); s9.cell(10,1,'💡 若WPS显示@前缀,选中单元格→删除@即可正常溢出').font=GRAY_F; s9.cell(10,1).fill=INFO_BG @@ -203,7 +203,7 @@ s9.merge_cells('A10:C10'); s9.cell(10,1,'💡 若WPS显示@前缀,选中单元 # ── S10: 公式-认定分类 ── s10=wb.create_sheet('公式-认定分类') s10.merge_cells('A1:C1'); s10.cell(1,1,'认定危大方案分类(GROUPBY公式)').font=TITLE_F; s10.cell(1,1).border=GOLD_BD -s10.merge_cells('A2:C2'); s10.cell(2,1,'=GROUPBY(认定数据!H3:H200,认定数据!D3:D200,COUNTA,3,0)').font=GRAY_F +s10.merge_cells('A2:C2'); s10.cell(2,1,'GROUPBY(认定数据!H3:H200,认定数据!D3:D200,COUNTA,3,0)').font=GRAY_F s10.cell(4,1,f'=GROUPBY({CREF}!H3:H200,{CREF}!D3:D200,COUNTA,3,0)').font=FORMULA_F; s10.cell(4,1).border=BORDER for w,c in zip([20,12],'AB'): s10.column_dimensions[c].width=w s10.merge_cells('A10:C10'); s10.cell(10,1,'💡 若WPS显示@前缀,选中单元格→删除@即可正常溢出').font=GRAY_F; s10.cell(10,1).fill=INFO_BG @@ -212,7 +212,7 @@ s10.merge_cells('A10:C10'); s10.cell(10,1,'💡 若WPS显示@前缀,选中单 s10b=wb.create_sheet('公式-技术方案分类') TREF="'认定技术方案'" s10b.merge_cells('A1:C1'); s10b.cell(1,1,'认定技术方案等级分布(GROUPBY公式)').font=TITLE_F; s10b.cell(1,1).border=GOLD_BD -s10b.merge_cells('A2:C2'); s10b.cell(2,1,'=GROUPBY(认定技术方案!F3:F200,认定技术方案!C3:C200,COUNTA,3,0,-2)').font=GRAY_F +s10b.merge_cells('A2:C2'); s10b.cell(2,1,'GROUPBY(认定技术方案!F3:F200,认定技术方案!C3:C200,COUNTA,3,0,-2)').font=GRAY_F s10b.cell(4,1,f'=GROUPBY({TREF}!F3:F200,{TREF}!C3:C200,COUNTA,3,0,-2)').font=FORMULA_F; s10b.cell(4,1).border=BORDER for w,c in zip([12,12],'AB'): s10b.column_dimensions[c].width=w s10b.merge_cells('A10:C10'); s10b.cell(10,1,'💡 若WPS显示@前缀,选中单元格→删除@即可正常溢出').font=GRAY_F; s10b.cell(10,1).fill=INFO_BG