From 7566fe3eeae526071b6c5c0e29e1ee3197163d06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E5=B8=88?= Date: Tue, 9 Jun 2026 05:02:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20GROUPBY/FILTER=20=E6=B7=BB=E5=8A=A0=20?= =?UTF-8?q?=5Fxlfn.=20=E5=89=8D=E7=BC=80=20=E2=80=94=20=E5=91=8A=E7=9F=A5W?= =?UTF-8?q?PS=E5=8A=A8=E6=80=81=E6=95=B0=E7=BB=84=E5=87=BD=E6=95=B0=C2=B7?= =?UTF-8?q?=E6=8A=91=E5=88=B6@=E9=9A=90=E5=BC=8F=E4=BA=A4=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gen_workbook.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/gen_workbook.py b/src/gen_workbook.py index 2ed6b72..d417e51 100644 --- a/src/gen_workbook.py +++ b/src/gen_workbook.py @@ -160,16 +160,15 @@ write_data_sheet(s5,tech_valid.reset_index(drop=True), s6=wb.create_sheet('公式-年度认定') s6.merge_cells('A1:C1'); s6.cell(1,1,'OA年度认定(≥2026开工·GROUPBY公式)').font=TITLE_F; s6.cell(1,1).border=GOLD_BD s6.merge_cells('A2:C2'); s6.cell(2,1,'GROUPBY(有效≥2026!K3:K200,有效≥2026!A3:A200,COUNTA,3,0)').font=GRAY_F -s6.cell(4,1,f'=GROUPBY({REF}!K3:K200,{REF}!A3:A200,COUNTA,3,0)').font=FORMULA_F; s6.cell(4,1).border=BORDER +s6.cell(4,1,f'=_xlfn.GROUPBY({REF}!K3:K200,{REF}!A3:A200,COUNTA,3,0)').font=FORMULA_F; s6.cell(4,1).border=BORDER for w,c in zip([18,12],'AB'): s6.column_dimensions[c].width=w -# 提示行 -s6.merge_cells('A10:C10'); s6.cell(10,1,'💡 若WPS显示@前缀,选中单元格→删除@即可正常溢出').font=GRAY_F; s6.cell(10,1).fill=INFO_BG +s6.merge_cells('A10:C10'); s6.cell(10,1,'💡 _xlfn.前缀=告知WPS这是动态数组函数·不加@').font=GRAY_F; s6.cell(10,1).fill=INFO_BG # ── S7: 公式-国别分布 ── s7=wb.create_sheet('公式-国别分布') s7.merge_cells('A1:C1'); s7.cell(1,1,'OA国别分布(自动排序·GROUPBY公式)').font=TITLE_F; s7.cell(1,1).border=GOLD_BD s7.merge_cells('A2:C2'); s7.cell(2,1,'GROUPBY(有效≥2026!C3:C200,有效≥2026!A3:A200,COUNTA,3,0,-2)').font=GRAY_F -s7.cell(4,1,f'=GROUPBY({REF}!C3:C200,{REF}!A3:A200,COUNTA,3,0,-2)').font=FORMULA_F; s7.cell(4,1).border=BORDER +s7.cell(4,1,f'=_xlfn.GROUPBY({REF}!C3:C200,{REF}!A3:A200,COUNTA,3,0,-2)').font=FORMULA_F; s7.cell(4,1).border=BORDER for w,c in zip([30,12],'AB'): s7.column_dimensions[c].width=w s7.merge_cells('A10:C10'); s7.cell(10,1,'💡 若WPS显示@前缀,选中单元格→删除@即可正常溢出').font=GRAY_F; s7.cell(10,1).fill=INFO_BG @@ -197,7 +196,7 @@ s9=wb.create_sheet('公式-预警明细') s9.cell(1,1,'OA预警明细(FILTER动态筛选·无合并单元格)').font=TITLE_F; s9.cell(1,1).border=GOLD_BD s9.cell(2,1,'FILTER(有效≥2026!A3:AD200,(有效≥2026!AD3:AD200<>"none")*(有效≥2026!AD3:AD200<>""),"无预警")').font=GRAY_F # 条件双重过滤:排除 "none" + 排除空值,避免空值行也被选入导致溢出触达A10 -s9.cell(4,1,f'=FILTER({REF}!A3:AD200,({REF}!AD3:AD200<>"none")*({REF}!AD3:AD200<>""),"🎉 无预警项")').font=FORMULA_F; s9.cell(4,1).border=BORDER +s9.cell(4,1,f'=_xlfn.FILTER({REF}!A3:AD200,({REF}!AD3:AD200<>"none")*({REF}!AD3:AD200<>""),"🎉 无预警项")').font=FORMULA_F; s9.cell(4,1).border=BORDER for i in range(1,31): s9.column_dimensions[get_column_letter(i)].width = 4 if i>1 else 6 s9.column_dimensions['C'].width=22; s9.column_dimensions['D'].width=40 @@ -208,7 +207,7 @@ s9.column_dimensions['AD'].width=10 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.cell(4,1,f'=GROUPBY({CREF}!H3:H200,{CREF}!D3:D200,COUNTA,3,0)').font=FORMULA_F; s10.cell(4,1).border=BORDER +s10.cell(4,1,f'=_xlfn.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 @@ -217,7 +216,7 @@ 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.cell(4,1,f'=GROUPBY({TREF}!F3:F200,{TREF}!C3:C200,COUNTA,3,0,-2)').font=FORMULA_F; s10b.cell(4,1).border=BORDER +s10b.cell(4,1,f'=_xlfn.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