From 44d3f72ff345a1e1d41e1dd6d052cef281555e46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E6=A0=87?= Date: Tue, 15 Jul 2025 15:19:24 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=F0=9F=90=9B:add=20templetemt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/日报模板.docx | Bin 57317 -> 58428 bytes app/tools/deal_excels.py | 43 ++++++++++++++++++++++++++++++++ app/tools/final_doc.py | 36 ++++++++++++++++++++------ app/tools/replace_table.py | 2 +- upgrade.md | 10 +++++++- 5 files changed, 81 insertions(+), 10 deletions(-) diff --git a/app/templates/日报模板.docx b/app/templates/日报模板.docx index cf976b127d38b908d67fbdd7e1db6767cdaeac10..ee74b2560541c8287b7b0d8312137bcb154a5ca2 100644 GIT binary patch delta 25131 zcmY&-V{j%6&vk9vwr$(CjjioowXLmf+tyWX+wIo2ZGZPS@2_VjzcQ1VOp=om91Vc? zPJkzILh7(`-2Y1EBLt`_kC0%5?Q}IPW$Hdno~CHN*ueDZM>C>`9DMiv z%hEFr=y@UF@plfsnCq7pn)k7Mq_gBzMF01fLylPM%q^h6usj-BjJuc}Px}ltz;||T z&g39Y5*y>4Lds@9ZUf~Klhmkv6}~`PU)tKqfLY9bD>(DZNEXn`dEX~ZC?k3nvTH4} zWseYy z76QhbuF^IPi@PuHBE_5`LIoy3L)g*M`K~c0K#iody8K`UL&#sLh+)8~=@lw6o)6zv7 zc_;cqPk;Xke;>lA`{p}$Z8bKgn2s51nLcZ6nOdi-YtdRe#oJffTDdGzE{jspBl&i% z!E^8Z+!~L}`X>_rsv-{#fdK*n0s|7Mv@dc=U90sA6a)a$1qK3w`k&gu$y~+N$=QwB z+{x9F$=ks`JjGakgau=42Xa6>dd}gmdyQJRlE(9)h;#8PR!R@!YAI#(#q*Wo51;Do zo$H^kEjPDR=EQ0QB$L|ON3bzeQBWHr*eWmh$7bDdZkomf+o37B5wN_$VoMjFiEi1b2P-4kSpHLXyDKlXrTe8&h{YE2lQ?`Wo~lz%C(g7lhK|JEpXQ<|RI ze33&n)t%M<8)u-7xS&TS5i?PvKvz(<6e_lVSgH@5-sA^fL>dIEmYHQutgNeIyFd@i6EEpF7JYHrI|1Dw#7fDBAwhDAQf4 zj<=>MEUbSA`M=45Dk%F*N!0`=0T?>vuwX>oP+tj??4a92XQPN#hb7Wpk=Th^Q zl+tZf+e^p?u&BT?ofr>z3;QlC7_rhJ#@m!36Q!M7Wl&CnAC(cDbuP&=0(_0=0xoYD zRafHXRg%Cf>Y7=?u(5b$C_C5s_6FgdJT(BZwGg~(lLGjBb^I?zd!edsV|2uyaCsyM zgr}K2uHfjRtsGlT{H%KzV!flHmrTVwgQrSkI5-ZI9v3ScZR1+d#Tn4c8oXDW@0C`H zFBF=>!1*DnVRFF{R4FD`fWU>|V{OZb@Os=FR}IO}ZEv4QtRw~y+gqTC8r9wKRB41( zEZBiRmFJzA>v>ITj;f^BPR`@qXx(X=d`pGw{XCR{uwLS>&d1;ilD;`F^%eq~)Foyk zr0f-`Y^_|^+9y>&+H;sZU|{bo5ZDi`9kuJfy1m`Vsn2WM=_@ya4m_~{0MGGverkCy zTA`Ws`F_BY@LC8VoiG5-Ah4fb&>$c(*#8G0FDF+EW;aWBcUwnmxBm~IHXU8JjS191 zWzBE!Sf6-_8N^1d?cuIxsrzmP{y-uyaa2^KWe^O;pZCXI6v~#Bwe`B&aFLfs)-B@~ zllO{(f#s$Bh1GidoE*xo=M4D8LkCr^7w+k~f@XR^*D1hv3#0oNzFUhw+t&RFH{fSO zxx&NxohZWtUS+}kf^R_g`s2INsIJ@J>DQKF2lOI{+seA$%k8fl?Y4Gg;E3k-GW6E( zjb^%!3d|>guH1jE+|wlv%c(In-7^jwZ9Uu3wHsUYGqaD}@~gsTUTF&JpE^0^#0>Sd zRfCc3XU~A6qMWuRfEK>Ji!i;<=K>Yc#V;c-vh74Ir47NhcJGW=@@wAUPzSd~kEFtG zybk?~W*;r_*YM&K6=U&A?UJi>b;$iu{QN)pUQ6KuDOaqq9Y@Q*_{(uYZii#Vv59;7 z>(I9@tOF_*&)(fn>mRIK_a&EM^g%BeS`Gfay>9^m7WMk-K=P@Fe>;KX?5wvNMp16PLwL9S#!`mea9?KaHSdpYrJ8b4J>>H`~D>^8p5Oj%9OLm{oMZy~Z3 zzzgT%N7h@$hc6$S&V|pe%AJr~c$KI_!uIsXi;4^B~(2l z<%9u!4i0a14!(wz)@v9sZ)dvuOYgc@KRR2j#0iSq#F6W-znf;|v8BS_jP&!w8K{uW zZ-?8L?3Xn=AaDET*{7~Zf)K;bLOr@NcSLF#@<$#C(|IPBeC}v|W$)Ko`}))!bGj_w z%Q@PM{Ygavb7)=;>?ag0rr$cW0>^Jqc>D**DHR0k-CX?LeEKp{JS=*;d@7B8_E}Wp z-hphGNRSCUPhC1n8cb%XRT>~FOm%!ds{gU^wQ(EKGyH^(*=@I<(O2KT`S3y%DfK0N z9y=eQerWqqd;TCTwf-pJPd%?k?os1T=6v5fXkyzs6|-)B)Dmt3elNXyDS}oa^t=Fo zzIF`uE?|d^HVBhemzOB>QY$K&S45n8g}mKg7;&*aEM~;N>nwKZt+ol$D`VaS?Sx&~N6P zUZlsN6f87-I_Zm0*H~G9xXq6otr-9o{r~#9LWMNepE*W->;Zr!rnJ+p{9U)=Qv=hk z$V8P#w|7D1H-#~A-h@qdU`ZM*7u3vT9&ea49qm*!4m^4sIR@r7MElCR#b_VRs0D^O z?Fr3^S6@OjOe84iE!Xn9o0)~e+qcn(vsS_x}fEjB(6FQ1)duqO(vUW&vw52wI2nR%U!A6=vI84*lG`FUDFRJqwQMYH%U-K8$od3|pP( zqf!A+jt3XT0piknl@~xA6=Rb|%I}eBGQyk6ZD78 zT^RJASeyp{l?EzOFvS5iB1>i$joUxIe>5iwtRUu}G!JWfiYX>TAw7LIStpjPLKqng z8l*dR8AS>t>;|c9*sdZPWKT5e4#kuI5u{AI%v5@mm;%(UXc6Gc=vsqrSaKry8>#}i z4DKk5EDesIbB~+^(0tBJz`f6_8L86OmA|Y995dF!UAoILNcjROiD9oOav57HfAX|#-t)E@zE~b zI~f~VMp#95+yanfN>oaQ)|BX~aXO^ELn)>Kl|g~;3TJ#+AGFKgYt*xs*29~qe67}2 z353_Jy{Kb++W!;ZPe)(nY|O*YPgk%{seu65j)neO4dP^4UHRv%_!O`K;l2 z0F{5NM2vJ$YvHHtn33KygHF9Xq7NE6w`b|6Oie`SeS7RZ68mS%%Jk`R7b`BY@s}^p z;;MqVH69@DY24#e0i9hj*VeUsX!oggd&F`@%klw)`~7WU!OKCjjat1oFPeKA{x43L zV*@gj+7*>SP^YILN_nz&$7;G}dWR-_%R0bf#EEy_F{3YsdE*&$96>PdnrOxGY#6a5 zxFvKAZ-!+6bn)XPX%G0+>C0;O5V4a4yonR?17#{8HU3$Nb z>86R`J)9rWN^Mv5#t{wZkgja-f%rZiXbC0JfPm~K|C;%ix=BF{IGA!7fS&L|u^_>I z6E=`YPTT%S6jlA`cft;>k%_iYH=u;%U295~k0Tij4W)?O^p{BjkyR2+VLsq)8j!5c z(fgk6^wq>W>>v&rmNccqD zw#`IYlI?o7Xc^5sZHARi$~|}~t|^T8WXx|G({Heoekt+(y&)YcI0H(!okA1&F1g0U zFKCgM^a(8oV1iPR;)6EMV`d_FgDdIjo)pTp+9XW(r=cGJqQUAe-=!s=vvjO}Ptrny zj)kBQ)ThYugOc`bo&s&9t6e@I!jE&?VT!l~s!c@Jl=eEPVRw53LGa>` z5107%eOvp9l1v<6!}c3<2!$I@C?f2{+=$i%bE9X-pLYl2tOOm?1F~&1* zeewE-s2-h1gDfLgxz;$tzQH-XIVj_Xen{6?W{NNgzhhi7q}F>WVzZJI3U(?-RXU0~ zRoQV_cQgp#?$+`lIVeCwtWC?EfDxc%v&bZa>FqEUE3zj=Iq8aaiMkpLQZ6VG@UPVV%}(+{S}+CHk0HT>9#I*|2lW&PQ##3aB5iq1AGp`Ox-Ru@_o5#$q>m zb31~Mbr_LhOGfnX_ab|Wn#7YEW#vLGqKvvGGab3%DU?q2;ckwZTI(p%YrB+y*b>ug9&OuY(@I zt8BeDt}H%FL17Y~rRA&NhL41&qp(;2hvKk_ZbKL( z!LfoOfR%~))nhFf6sRAP9N{k5gd&oXS4P&T4*T}gpi);lI^}pM!?Lw*tVIgx?l?eI4<`3tR036R((@cYnfM^V-Co zZa<@ad6BT}f)Vr>#@Dwj#CHGJJ2l|@g7|A+UHj+z;J>sW${^7U4LD;p7KwPiu=9r} zm*MHtEekn)#wOJJZ@*$MJ|f#641BB@_kP^X1-|V7ex8KCKFPU+m{}#eAhgJM(Xrv* zN3>p?&J+exhv<9&rSr2H6^>ZKtl#)13Ngx|q(h4nZ5 zNZ!bd{mIj=!wdcCA9KhsbPlIfOvkv%>Y=xYbTRV-Ms_#F-axOB#+zJwl>PT2PJ>&0 zI=6XuvpYFue4w6+$qLwqiphS{XAX}gky*YHfz@D!;EG;TBrT(?A`}ITSL0mTy?>;B z&~rid1LuupTDTaB!9m4Z)|frPK)F*@*o;6IQXAN;00H~5VEFksH6|6q`kG8PHZxMBJ4xAw=V2MOyjf>75q46>A`g_i5T(!qERojniuj zK>BkkT39CW^@kg1B4(r_QWwm9wNFYO$XW0@)2M!REj!Y+!hE#~9^GfZHs_a@|Fc2{ z^>=F4;guf=v``myCYhQPjbBnUd#T9^?mh}KOK3g3|e zLd1k;FGmcd5D`cJHitKL@2H^nX&;*#Fc8wW)WX08Q4s}NQ9O~o&KCxE{CQy=UZ0&Mtx+u8p5WTx->uU6sz1$>nh7@h_IFgJn< z7MYPe(5{lgVJu9OcX%iEh|EOnkNmtr6PRp+-4uXDw`e1g*COmIQ(saq@Pg;684nwON(2rM0R-UtEUfbeaYGaM-qu#hHQAJinJGL1hv%yR-w$pGn%x;IXOV z#CYE)ha@x5p!bEAOa_R{%8^1D4UH%e8{QDSNqenE7clweSn#JZhzXFMOq|LXKlxw} zf~h?_!I|JeYB?QJKKvADm38(tAuahYqU8F38y)#?njo+Cf##(N?<91}PzG6XKxO$k zcn3`kvSgb7d`J%Y+su0<6={Dey25`OG*q98X+F(d~qj0 zFUP>tv)(sovxT?`R}aZmJtbbb>I zC^nH+AQLx4Nec9=8e_YBN2c$U%_<3iTLmHiG<wl?Ee^(9PO*SOeN25S+Xb=v3_9u9s^MC=t!tog^IMErRUZr+%Kk(y0 z6~s*3JqF)J+&qToaVM+QiNAzH#hO)QXZ@>;0f8CQN4^DhW2mqO1&&YoS5^@K4poV? zbw*Dlhw+l?1RXOS*M>}l};1seBH0C6r3MSj4ALo zBnpO1jGu2P8g~xPnM0f;+u5-raNk)opa5SbFTLyQ(vx`#;=FBVlIi+4|c2?p@WN!o9M z7?XCs?AUCqAWEH|Ry!b<+wikU3#|P+Qo#}DyM>GZPtNs6&ktinq{8{}Uw_*dg?~4> zplJT30qLJ=qZ>ema^UCqLxmsTX3g{PLy}xRi$@X%#5nK*y>v`!&98K7iJ|r5;$5Z< zLBJ^abu83(HtZ0*Y>|p?e3VqFuBa~jwmFwa8wEmfC}+y+H73kDt1MxsaJj@{^+XKm zhw43-S95l*p8TH>%wmnqlVp9;N~Q2FR7i?q7nJa|jv)XR5f<>kAM-geNx;oe$ZurS zD*xhcf1Y*hWW(CHco1cTaq+Bj{vz%0_e$q#wv^ZHDZ0-w!)=FX&39ZmZNWpCyX~nu z6x49QhR$l*#8UE>dq`f$j;rl2;aX^+PYUy7IgGR&{}N`#bx&B+1$OC3>YG0ftSf64 zLANZsW;?)QrUM2IeEqEVAGNy6c#gi^{L_9G*;uxt2h+*hFW-fiu`DGiY{TCI{UJ zGAl{Fa5cC)xkM40$-K5LwYYE@LaCK^lK9<^U9$j>P)?}JPQzmL-iaD9ygQlJ+_5!_ zjb!S&i^9cga@-y^G(K>^S1MEwL7HtpftMk}32qt2M?2XQv>^fysT4dj`Esj&yY+Y1 zn2-M5zY_)*uRT4(6U*v~`XX#0Qg{UEX1#Xr1=ub@qciJ#K_v)Q(=2hL_gR_(vq33m z1_MA&u?2k#?idQ8_Fo^>@{Oi+4*S<^LbZRIm}&Bhg09aXEa@o zW51i&&YypS)9Olh^_KFF4C0%JNG4WHxoZL_$_9y=FFXb8j4~c${cSEakKFt4J}t5! z%7M!4bVjF(Y_@sqK0x2EzM`!C>Kh40{Y2~i>B;e+$9mJFPhUQ~^l|$IFRJT927XIV zp{!r(^GtO%6!p)uuE*o?kVk59wvs9N4dtL6@m5m8HeS)ZqAcBOR;-0y6sbrkb)JAf zjK2-9E^D;BnWu&vCS+%DW4d_iAnsKXT=NdO*N3%3W9b}Qy)pk-eaK*ouVEIqn=pT3 zfIp{>$8mg+H!Jukv*&!z7&J_{jarYqeU@^!1AA|As+?uaw*>4WMjXS-hdCdd|2w%h zb0XD?*NZksLe-cL!tP)g-jJP%=PLndzI(B!uEUMluCh#Njeh6|&E{+Ea>piDFWbYt z%}~z8_yT9EOhkC<3Vy~bTkMqjN=S~pRgI;@(UJU$hvJBD_$lzRrvf@-ZeKDJLB~KC z^Zlr!g|W4jnp?(Mc9=7c9c!`54(OCdD1kl{6eE2H^5+?w#y0Hb{E~LwEZP9~Rr|Fo zS5cI=-5}66@2gt9X^S5-wY?-eug&B^PCWi{`skLmXs-3D-qunoVRwoSlJ&o3k`;eG z8=1prxW5N=yvOQ^i)yS+yBSk?>pJQhrzL<8)bP*kNIJ znMOBtb;FGYmWKsa`nKZF`g;I~twTDn)ByazpsUg1EX#2wb6NR!7t&{O(Wj6+TgILq zu7!kd2TLD^9^G!+)frAtTEV$X_@TR-K5i(EmJ)7V8+c!6mcA15I~BHIiBdtFy) zMqP*Au4^p@w@o9i3Ql2Y-D!FC0uIW(Vg4K+Dc97hJ?-+}32N7y%yoc~$`;pCOS9VP z+X;@ee@fC7@ilT1p_%P&ib+TTWjEI+C$AiCc+_u_xlSj0T`u-H&|N)$dEP>3(;}`- zEITr4tGVtq=MC5h8(-Mn;B2CArBILlK8PXI*SIuJZGMX+EBH{MGhXA>>DS@5oJma| zQSd>GJcfaKO}Q9bWE%jos|gDDgsAcLsU9Y~X!4->T2^z7N+*!>kl2kOn}PKNLa7Bs1UE62+T)xCMthE6nRFx6t7BG_m1a7Lo z!OL_{siy9=F}0iG+O)+Ka1lYgBd|npfTF#>28=#%u9u}FfG+SzN@H6ZtR!Slgz2fy z0nQEbt-}W@`$>gXPd%!%m?FG8eFW`Cn!Sy$-%!rZ8-&umANxSVz}CXM^{VE0elJZN zN%nz^ib6{sNl^g0ND2$=7lHeb4^rQZ2OiDF6}!0t<&M^r_5o{1@J{?zG^AN&F}Y0Jqwdvr7u zb39i)vq5|!+iw0cc&aJTXGZ6xH26|Z5~j#YMs~b(5u$)-885ZUPAb%Y9lKlqf}PB$ zveRGGyaN%Yv(ZK3(YfxwZiGI>eW;WgRnP7C&d`;%NwWgQE_~0V4O)C3BJTA)F6OkN zKI*!kelvxCYi;>z^L~YA1OsXuzi|5z{1-`=0?j-wP!kKQ-D@!R-qphFq$@ig^;E_B zUW~os&=}^+5G&3S@AulS>EIdH0 zC9DdOP#FVLrxT5YFn@LY(SdKwksdGB8ZwNpS3J(EZi3Kinj*r$+lJ?UWmZkO>@iCV z7%|#_Gp4j<>&3011&67+jy{JegjHf%Xf>rftZqvm6|KD@k~cHfYk@nB;Q5|`^ok71 zJCw#TEMBfQBWulueIgx`vEfTV^(@+t?=?TvTGV1YiilffL*=o7MC7K%Es%sq%ONkj zPKi>ADJkH#ZJ*$l4^&2O&v>1WLEi-fT*sSfm?vSF6TW}vcfSjpWgDQedz40I^7cj! z5AY@`Q0)DRcr&p56O&Vqt-!SW{OfgK4n!fdya8dNWT`Ie3Fn)$HP1Jz>AmP1q=mv* zCKMTz!Rn`qG-B2rVY6embrVh6%HSs85^+>RG4{~@{jVK?LInwitls6boc=w7Q3zLo zRkHGmsxXNS`f>(rfv#y3Wly!lq+vz_z+$E3>^Gr6{-$W-1U4b6DfKbTONW8xo?PR4 zI*oG5-QNV%XHk0Sp-pGZnYf@Ha3x>j%h(~>+;Xq$xjo$FlVj#2yi|jKuq{lIqEPTH zpYy-jxj{e{V8K&;<*5McjEef+!fC2bpd=(!Pp8W*`tSQ-vPoeOX!al!lx1p`b8+TC zrHve1KfxZ)@q?_pas8uJCCUUs{)C_3vhrJBv_Hf7exOMZ#Avdj$Z8#iSg=W*5Z8h? z5Bw+Jvp+lx{OTUl4-Oq{!iobDipsj_xj7y5V{d0yj0XuEf=2*oD@rFm$Fb}Jq2|xC zAD0*5pNaw7nWHU(I(y9!TAbqjInL^?w=*>qjT0;DFM~ zPe^e_oZ$R+{GI@32y=BYfjE9)!v{LI1;j1eZIo^crrx4c%KqUC-x#6+e50&rE0CZ6 z{@}dM$c|&oYfH=KaeR0JX0-if@4CpU%=~vRc$(Q4?|sMQ$jwl=bM}L3tx%VE^+1cm zk=Q9E9%P#U{hD>&eG+gg=_nv$j%S&Vd5NIShQ`7_-BbXcDpYs!vhuy*OW^S)TW0@8 zU^5(p2P%~A?WSIv55MMzSqY;iQnoqiAENy~G({H+pG8oo`(Lvux^3AV>Q8Oi#GOZR zxS6vq`0?ZN@zp>uHDXf=r%c~ zL2Iy%m_U?*Q=H{m$ZM;m8C_gLK$}NzL}H8Q_BEh$v>|he(QByX;T2!V0MQ@W*malN zgo;81VsA(aakkLI<~Zbb;l=Gvhd1dv13Uj|`0O6Rn~#H*vIlL@vYeQv-=TO&LD(96 zHvhXpIQRQ~N2%Zc3sY+3kY~0IROM7EiH2I_G1^M4wc5^~Mua8&8UqJc+|M%HB zrT*{3!%4q6=L&+t|g1ZN7k?)J1OLH+-GqU8Z+<`ml@|eG6x(3f$Iu!|Vy3 zP9|8>;}=mFCz5XCY6&$mha%J<6V0GDy48d@3WgLT@u{?moiCIaw1~1SF5ABz{eZD- zLt;|c6an0+KRRL(WaKq(TWn<>(~Qx>Y+GoQLSCxTU|vB{Xwe1|8FzNvKFtCRs%Z2m z_XLs^h_d;N`+8hgjQAY*RKTIhN<&UU9V1GrJ}SyFYBRq3ME!L-p_Sk5e6&#VZBa41 zM+Reg7D%1xGL~L>PP5`G(&keZG62NSw{$Pun7yCRDZe?PkIToAM3j@f5&~~=ZJ)dh zrudKbtI13*GjI=r#|T}J57f1P&JQCv`3ag)aSNonts8U>s269{#=>9U#OC$k{9>cs zmcNI_ja%^4@g3J{!^i|TSXTr+#Q52bbF@eV0^4o3%VqfMCarG*A0Ic2^8nwUPm2YB z`^OyPg3nto*aTv4E9%rilXjItMP>5krR&H%6KhaH%fWe1Zxws+*{Xb`g4 zj0l46H`~!q_lHBQXC6$@2O96EQ}q!~g2tHL2`@ta9nUDTw2WhK9+04D3ZByB!iXEb zw)^TFrvS3sCLm6r_kfB`0AOOA_|JYpG*B`__ul%><)YloBkuGXC@j>ha6>JOYg%t2 zM+WScU)yH-^1qMViDwDuNcuO0QbdcYhff!_SVa9_8HLX4Q7Fz~*!es}sjP?7Tz!ca zt1#5y`j5kyZ~P|gyk-dml8Jb1B|vGhGct>uBOyvwy!+nlk|3hl0UXgaTr5r%kxDcC4{{r|E#8vDP%-{#NrjC3jzwz`k8L&%bifg-n>L7AwDF_nNJ z3FiKjW1^_8;Hm|3;v?u!5Q~aoL#`AnQ1{mT$x1hXZHDvNKyGh@kKL}C^`cKwtl-6B zLwu#juM^*4(k8qJ2EZQ-N185oIx_0f{N)p#y=@(wjvG`|wq$hHen>hVHg@0K42G1Y z>l|lI+{BZxQK|0gEa^6$cRThMllac$c1iuP zC!iz<$i1}qR_O)#)tQ#J7Wo0UJ&PT}KHnq4BRkdwUpury+0C1J0ic3mdF%qO`{2k@ zEGM^aYh5rcfO$EsageBomLr~;EiQ~HAEhOM2`t3qq^neA$wlZv1mYvcT||KpEzu@3 zHzqHgwc2_R$v1UOZTet~CTBR$i%K{*krHbu+@)p8(?RH2wseOeJBXbjQYVgorbG0~ zm;^oD=xX`Vw-|&J)_;b`o{fjroH01`mL5VOrx}%t0Nf9YG&B$v=6|xDFo};u_iFC6 z=g(qd4fuL7kiz7H19piM8*JQOXLxt$t&&?J3H!7xprqve5z#JrmOxMP;P8YgYELT; zcwwy3%aT|zccX_>5q?WT1Z$!0*t^G7u%qFg2FRz(a2+9H2|_ixF3%7SI?ZTa5locu zCB&JM0RrAo%9xCwZDT-#V&UOKWI8?=6bQgaZ=j`VJn-2+amZjCRbK5As-c9% zrn$Tx$wd}0uBHh6vjb&=kc-)q-0}~08^gjE37%45pi$fr4%}0A8Cb!vOVhL7|?Kw4e?imUE~`|d~^m?I2x+W0;{{o3B|JHXU4RK>g4IMq>a9jjXx9OFme zAs>iU!u@$_usN5W>MpjxbM9<(N#jpJZnp2wpub_EPghG?%7O-Nm|1BqxhFT56?e7( zMwvGBWBU5WF}U`ML$ghVd}l7%60gq^DFsZ%^)Xi7aODk{cf644?I6vUb^tTN%}6!4 zd$)xeYnu$~dMW@KXMA_f>IT9LL&KsLjEmp$)vcFyWAAbYcgy0Q?Kns@!u2;oR!DO1 zdWr)l*BPhgPW%t2CKua6+M7*f>E^P4`Krj5(Aq8lVBom3Hy6u9vC!_?;0{_7OYn&10WD3{_$=%(Y8rBYG@Ayy z8sFUp6`OqI*c#{j(4VDH1IxDl4v&WZCX$ zE+VE&0;f#+i`ZY~*;U@LArd)pboI_N#~JJ;IM6Rw#UI`^DO+@Uk}jqfHW|fUR&3b= z%7h1?x@Vb!ff{I^wQVHV_B6Nv_14%{6`i~_p~98wAy-3z*7H9HQj@y>HGcW{qx<{) zz2#&^Z7qbip@2x2-&)Ud<=uVwj4{Ro1LQRLqqux|)0I6bsGkY?IK zuRbG;oX`Ghm8&GX`Dh08%FrfqW7WKkQEJguwU=?o+0{3i@AEU%6K3}U+FG01bvKP& zvD)(Fz6L9h!Otr@Uv|9%u9}SX1UEgZfw(&^@HHWs8+X6I&a?Z;u4Vp|Tb*t8eI5MG z?-Awo9)#Yg8H(uMW1gvZVq}I+Xl^yixT-U}F7$3xV0`-L(#K8MuG*m}1QXCA(E+BU~VrURzi+xofD zUo`T!Y*Gy*2~Yf+A*opQv`@}%dMw*I|J&c!?*M=88mOPScmIlX_HpqcYP)CCas8XP z{^~kLpIu3Ot@CG9{m8yi$E?i~56d~#Jmz09weAM8EA&ixR~uCZfW2&Xf4Tf(A*L-u z^JV5Xd8I7U?hRaeZTso|#no@)k*Lp1a|Ws}TTo~H@AV0HJG{oE8;7Nvu?g2QTp1a8 z6!c58-u705l{S%pl{PY0qORvxe&WsT0=cKh3a{R_74jqFP*sD&TB2Q#?vOT7%S8g| z@oM zR+e;bZ+COA|DcXpW523_Wqe#;_f96Jb|M5-FNQ!*J2` zxn|nZZKZ}0z_$@A`nDIaz|7_?;#e~7u zz}=s+&cb?Hb0RJzr(SDAgwxMnl;Jp(dkctWKcX4l}q${j9 zdug{gXtNX`gwJ3eqA_R`-jgrecSq)TZ;~u1D`&--e2udhqe5B#TxRc zvzrkHFuj>zu(hgFeXYqhG*nV|$wbtsI$cMMHREw3LPvkGEMBiwe%(+jw0yrAnitx( z^lPn+^7`A#a%+#5vqM1WV;J}Yf*$jkVV&ctGdfgU~?ZxH+(1?}!qR0!JJ+@99?Xx5uFz||D*BphY zR?|a1VJQ;F8e<#CGBvfua3p-}iFuTHbRxt+{M>M;eKF+mk6eq4EX;LBgfc>6Mq~`R z4Y+8CiHuD^J)o^F0?}-3s*Zt{=*aGzru6c2`tb%g+^3mV8s3RTD*h>0}d`yy|xj8BZ6oJ-p;fqI{2Y6he34J`O;_*nu`qw z4VVlxb^4i196R43@dZvWvtDeGYIt=3Bp zI@{AIEZ(?gY=l{0uhB$7@=_W!LnxJZd4juLQSFFPJ@(z{X86YxaBa`85aF8q%I5bG zg@*83xp-)-PmoA>jzF*iS@tT(@}9r@*ip(aS?8X$MigeuG~}#sLrmEKQN;Z@##&JX zfkbR*)&=A5*N3qAE|->==vHcpYRTFazR-%BFC;bWA`EDn*ToxQ0Z81RW8_MOy&NZ~ zg3aA6YXy+W}5U!}CHT2$6 zO;JCRdi_(WU~|vcLw`VgG6O}%N{AD4VBXNn`_uvt^^+deEMQ-!#Fqa?i%J{ zp`h0Yi3Iv1wczs=s2Jkc^~6nyr@=@>>1a1ZForXjSYL zK97n9|40QZd#ZxZy$8(QtH_e!=TOk=i|+e&v%VBv`@E-s{xd!mV}`tMfOl;*Q&$C zbUwD5)^O10te2LQ<}t18irb-dB>1AGOp%cYQfmzEl3sUER^Sk<&ApSnO&B5tU%pFa zl(E2aCCtwEqRSW@_xV1G)N$h*XasOjFY|XB0{Ly|7)3V#oz`{?cYmo9&I6^V;pBFa zNA@WdSxDsl^+h=JnaC7BQS?zOaunpwGktpg@D~Br*~UR>DA4$GV}tqoc|uf6D;2ONAkfZ*lodaT1d9J&0jdw2-j$_JH_f z_fwpZF9rnAO4v)_tyRX3w`9$SDVmN$1X_~Qbk;AW^df+Mw(<+adF(HFc_9nV4-**i z=baNNy~q6x;OFvV4!XmYma{}Ajt>QN)0v(-&wGfn$Al4a(Q=p+OORa9J)fl!$xRCr z^Tr*gvyZo64|BV4HEc_LOQNu1bt*E!TQJ-P7%&J}kw&cvm<3)G{A{C3siQGE&)XF$ zYIrK>=%8_|oQMAQDAGP5NsSs= z+-E#08iyT)slSb0ztB03#7Gw${OU=jDh|Q^VAxhhrZ$C~^^9`CP`TT~#zRVj0ZG{O=s)Pefwkyi>p0q`3&jI~(8K zAd>4XPH)(U!XXHI2QJbC8`$+A1O)n=>&ytC&sIi*)2RGk*i%YrQDwe0qKLK>Nb~XUTZ)c}zP>B+b8A+2=#I?y z-3;kuT1Fw9!qZmdjyzmJYqDf-A^G+f4+4}H^wd9DwiEh-;)7*g1%OXlLC87+{%jrq z84H->&gyn2>#w!foE1`f(3K~5<`9N+aCT_sqNFfxSVkB&aCP2XY0U%@)F62k)l01L zkH4nE8VtkTf5gmqRGc}TS5u&x$kL#QfhQ_Y_0H`@{177}E~!mFupT&g=8p z93OpW5dJv4c7qAA-rF%;NwuR&L0x*t(RfI=c~wc9$f$@Zqx zp%1u<;SPG`l6~x#fOy0p*v|-zaJk2}WkKwT%)o5|>dKz;5;xV#A~3-ANhOIkjWmR( z4xr5X>{6OhVrbC1q!pUPV#)xnf-8unn(OnQT|WSJ~WJuzP8hf<{$Rq4`~Xv9Y4RAcg?iY8?*og3uRr zy%vUH+N0PN6wk(-yluj056zuWl{oN2}3==;v;&j8lGms{y z94?yYucTaUh!QUdcs>7*B*$Bv08hV#i+ioy$U{-Rv10!D@rF;#hv{fp3*QxK(ovq) z7EeWUxlMLzS;)L-MO)hm)K6(VLWpRYzRza&hr0tjEw~SeDf!4YBP;{E zI}!#zEW@5^$yEsBb6ci0F*%^?06~vY)gT4@gziscwMfNu_2Qbh)J~s|W5WKAk3Gst zf$!@riGcy{-!~DEHO9;6@h8@h6{FO>TQEf_B|b$$JQcv;P#IIYU>#IVHHO?jH0(?R ze=}yM{2xD8xV_{2hx%3s+4t!Zx`1F}qNqk-bL2KLq__4svn1a6Rzi>E!LQ^0udDBXYNBiY4k46KB!u2eLKUQi-XTB; zMY{ANh*YIFh0q~L4^4V6QUpanqzXvyQltw?ks=796!nYG^S=N8_kDZz>^ZwTGrK!8 zckkZ0Grwh;>@%Pq`;8`0lwEWjYK9{Jg#zd2jl6oM+1@(GY_*|8{3|{n-Qo(YJ8;LYrPAGXav0+ou?Y!CT!~s9} zgm{({Y|lU?D!(rW_P?gmp1b_wMv=*{u${7UvxvncB^Vi{o&nYGA=A*vAZ$5bde}^l z^p2>*B7zS73&WJgM$*e-JN4%Tz2I29)pHTT{+&k;SM;aLQ3@zEf-r z)`)ZE2b+QrG}>xCH`)}T(ZbW>0ow7>f4=Wg74`jw0!Cby+K^lBntHFXhu-bSQ*pGE`ic{TH*mNif?H^lo`E}|q&_ooy*BXAugg85(;>`6wu zE=BDy@HOxIiPur=#+`UgmU{cwugdY3v0*-3C!qX8H|4Q2uZ&g=@D!23%8&|xERJLeDSdH zWD#>aXPxlfXM@28+C_-vO)o(rD;F9mxJGPKmrArh`C?;zj%ZzZgnnL6CM=t_6raf4 zSU$uLNdf0$Wv<=l=O$lLP0TnJ!-SYT4P= zX1;9nG#unn7yT&d@!IRVpRcFKqVQXz6E%5~-t>hdPT-Z?kLKzDX_~<2?rPv$j>4jr zTU5#lzqb3RWfbe>?j_UR)1IfnfTvFGeV0LtDu;fnnk>Tn8F)fv8?_2ba|jo8xT76j zCa_V<)3d09d`{SWtyg24UMeocQ;QwpQu78^gv7LOYZ_Y@rS~|DGc5+%;!G{wsjR6J zV6+P>jzU8NEMDg|`K(!+Ai5SZdU52th&$}L!FxIWG}Wfl4O#X@eu!=iYe^D)Ju`DH zlu3)f;e!cz#q4G%t(Ew#dTwLv9aFTP-y68)_W;+q2*dGyvC~-6EZ~AZTUNnqm%InG z(l7s+nR3fOsiJv;GA4Y{n!5Ipq}?=OBwH0ucQ^@XPG!XJZ~lNoB!(We)_i+}CPE{s zeA^4P%P&aZtltXYKww03^o5g2e?>Fe-mr4giWgP$j^1py$;lAZb4g>6(MJK6-eqsx zicNrDr1wf!aOetEn&@&n(`wVXVnG2Y`<;WH2hG9euv`&k_MmKq$`60K94syf4HxS@7-z9`S!f7HkH4s)}of%ia3X4irl;3Y`h zj*hOeGh$Xj6CT_JM>w;bx@Hk?up=u**LGaZ7YXk%Mj}tKv;+c_F2qA`yk9XKeDjTw zX}Sq{PRK_iQh8$OyY_+a_)C><{|vx68exyFAfOOwDwPq~9gk19go_!ytgo%g8x1cT z>{@^N*Inc=s&l9%0Xj^Z=GTI#)ER)wr=M{gg_v)Br1^zruHi#2rSSVGrPy#r>O>(B z?t4T=MRO)J@1uFbZNwpGiB>wn!31DNAd|Q;UC3AHwi9cb_s(!z2Aa@CV-8WkbD^N- zy<=o8S3!Ufej-<|kCK$u-nFq+OVO`I05YCcKY?S)0-xMldFl|Ig9V!~Zo;=kDJbQ( zh_i@?1c`ziHe0E~zOK?@kFS`a{$(*&vs*v#vO#H^y>VQbnAV(C8uR!p7|pr2=W|KD z`*}BVt6b$IxZ(@UnbS9`RTIkadF}SJ*+#B_0nvm~z8~)F>!`B<=yo|`BQ}dzH21Ar zBt|uL2}#w8@R|hK;I)PY#x4I@EHhzn8VhGqO3 zZv{bljI%-1_Dy5TTyjH3Z%1=4O|SCWDqkSqqikYE@#kKC)k@l~00GK2jS2#xaehtS zB{3MZt{f4bK}^AGOQO$fD>O6xHUg94=?ahs+RIeT0H&vc49j@SiFgDkdxU#w%qE_C zpwNVOw~l85DT6K#Mf3|hlz~-Mrpzj0FZu=K2!2AkuUWhE^<5VLv75njs3SSaE-+I% z0W0z8``O_K(>C`fWdDjym5JEl?a$|;4SY&FSovaKs>+pCO8``@*X*W)Y5zX9Gc9n) z%-P8NkYC*O8=C(}Awj1G0Wf%*fHH>T%_DF$CaUI9ojMba<)^e4?cCij`rCmIMks(oK@rO$+0)!7?_A74{?7z7XYq>z+FG}^lO z2Xvv;0yishp**=i-V#yFHgi=W4$w5*0}qqXy!onm$gE;aTz{g=KaTpZ&RJ8tP-5V? z+zev8R~s>>*2%iRP0(_O`DL>Zi00#6f~cY7-AfuwIuRUiOhnJqBI2YN&mrip8{f=A zkYlVFn+j!l&|rzhf;kGbK6KMMcoACTnh*Yg;s0s(^xXh_kui117%J>zPy z;Vn4SFF38ZIe-!(8S&ZSA#J1&Cx4u;!HvHP7R?a+Le@J6sShbM)2l&*(TJEKg@I)FmjQ z-p8#9=gjdGO!Fj|PxmJ%Ehp&LJnZC8Ak%nK9x5PKIw?`Q=hw40)y&?a3U%e)jE|Ss z>KD5!C}+BDp<%)Yr$?)x7l1}?81P{7ykI)KT&=vhe>h*93yEg!G-U1UMF$uGt0Y)w z-a3^<)7R-o6~2RK&9RN5!TA$99VoCHa7Ht-DteijNPrn5rhW>-Ngy`$cj<;+q?E<)KIxdsxJH}gOSw#z|${D(EnSkf0F zo)qfv_+r8(yX@77+_U}9!jprFZ(k%k%T7Go`v_|#+mf1k*z2xUKHo&9`cptpTTyAU zU3DYt%I@nbw^w_$kHXn2{bmNv4Zq@~bQ>_|<-gPU+}zcRT!u|eTZ>Y`Rsl=_EEfMs zj3~a1CX2^j>|xl8`WGf|-&R=<2?Gtep*Q>t4Je*|vHdoo!!Ir5K@IN`MrAadGCz?{zx z<%SDfHrvbgwGYfcaLs-sP;D+u7>nApIQ^RRh{&E`yJLj%75v zEfpYr%zcxBGK#buM5}o(1wB8i#oV8qvre!K8+~;6Y)KbQv{UI1(Nvzwhd~3JX%RSbhS?w*fIdS5RsJmuqfjmCI=b1I zcf${;-(6EMd%OGh_;6e|Tg2?_mwf%{j5-OyJq!w{x&w;D+w^7ojl)Zca%%FDwp0G( z(jb$hoa2h(EZ4=t6oo4F84I2!t-oC!>vC;Cs7pebiyi}!r&{_%IeD)lp8b z{iA5E6b6(1@`A1eZ5&sC7(46|sb0d%yLm!9n8oKFk-$*UP*6GBSVI6t2?8)dK%K(bN z(9oy}M>0Q(wE|B$vuY0s#xDM-QQKSgqzF?YI7YTEg-QU+T+*xIA$%IrzSA5BG*MlQ zVP^w@-9eYXlw)1?m82KvD}>!*mI9NReUq`SF!!C3`WH-uEoDqYYTl|KpXyu<@?V0v zrq`{5);_soqV0v%9(&-PmYczhjFPsPqN3Q!eVLawkt`8eCsQo!$tRINfH*C8G7)Vw zR-KGAle)X8h~56h#F39Qz6%?$D#!@7iB6w+`J=L6H0?5GBHJrB=1~7pqT<0` zq4ZF!6z1or6GD=W(B{`kv}+>_Znt4so>?`}2P~(dtqln!6Sv&AqccWxsZ*q4^nXuL zysqkU3m&L^MgTCi4>A1SY^U}>jQ+LkAn-nGa%0N+l0v<`yn)!f+YI|BxmKC7N2a{Z zhu-u1TT*-Pw|x3DF(;E0lrmMaXtQRxS*63yYAkUY`=oy(^5mwo|ER`e4rL6S2Qons z3G|w8x@q7s(c{cBt!fgQER`t_vxJz(5j2eOt1E^m1l3A~rh2J4{dz?fSeEa-j~p#? zDHy#NPpUpXyw}$q#r?8f_&2iZSHu>y-io|{t&QA#0%`4m0kvMgQ{>%#s;ZuM0^)4l zI6K71Tom1g(u+M-04UgQJhi<`zPCF5?8Ax-mt{5flSfpVh5GwtF>S};53ov-2dp$s zkNUl+#p1HyNYA*`0Gt9}{MW142I8%-i<)kbBo5`b@TG5c??e$gDV^^) zZeOww53$Vw+BA%#4-AlSA4)m}T>&rUl-{Er`~e@hs=Zf?Qz{ z{vp}tAKz=WYDruG6Q7O6o)hgHLUr9mtVvle?z==z4r|DUZ3>Vu8Ufcy&jTKDooh zf-XM{Vz3@FJs)0y^LoPEHbpSHrIgsnT>}V3)qSTVo$y_3WSa+(cV#pZflhZR7~tZn zJnx&te~14#yW-;_yFSbOs*(wqI^Qc=L&vMW-7fHWKpNTb0_*(Jad;b-FTk6)UMon! z_~+HS@~`cM>tPn<&=V>S#a~A_Tv6BgL780cQP@4f{q2)8+osC z(R)$Q-mHgOZK-q=2@cK3n48lGn#lJ#w1@I9f;tQqPw2q}>f^giA=jNF+FU zeNq!=5+rc;y12Inp{oWd= z26!)`evZ`(8ZO@~&P{f^<_vuDrje_*;@1VA(a3%zukV_@Wx>k870 zgv02etn;v>ah%>Lb?tKpE0uTkuQl6#O2q^8Ap+PPJ|`0YySp)~yCSnwFeqU1s2{;d z>u*`=bc^62tbu(bp8Af+83!g}izf385~!O4f(WE(QGPI(=M#L-1r0}qU+l@aiIswO zDVcTJ<{Xerr^d4ze6}hnyl*+94(|$(HU9X?n&ooF+m}B!W38!;fWh%x0B!;UYv4;W zD}FzydPE~#qfnz|X+3co011SEy{zB>VR4F4W9AcJE(?_kIuV5lr-k>34r^=@Asi5j zb=NxIfkBN@p4{r){+DxX1h~3~c z%HZ{yx*v`NR^gIh+P8`WZvjMm8y*?p>kRaosTj<41K7DNKI#n!^(7mNh_pR>Do=WP zbrR^`f${%2K85LhP?C|_dg$=r1iHN7jeZC5dlAakoEEFsY3~fX=7}H=R9%38Dc3pk zODz!42=YnFPVEAI?cClytg|&d1o?RIcNZ*ze9Kz@ZF`s7t`utc4MhZbtBI?J#g-}4 z4VNGmA5e3HII|XyoMYnC3_h=q&iX|?F;ypF1KRGn@tAPuF4)1Mm7a`42KR_btRyNt zJet&)lKRG-2xK~FAqx(1QJ=k6!1Ev7_EfKiw^2R-xErK%%?SQgYq=l+skO{l`pQoP zR{^y|#}GAGB^*eQ256lo-k784iJ{vhf`C=vDt8!9q=E<{g-#lUiLoFkIJE`DX^-h` z0+5q6J24V#zyW{7t)N-LB}`OJ=zt8oP~A}pvJr}h<{Y-cyEEd9h&yhZPc-RL zeFXaA%Pvl5orNhhX+2014o|2(yb~}DDI;DFzHE0RG*~(&QhfPS-(RivhbZ4AOngF_ zI!#wVuRX4eCH(u~`RnG30AQ^VF%QiY$v>_#f-3HDX)m93IGuAdZ_~T{om#(g_3(4y z5b?SCrB5uE3sl4*AFO%_Eq}O#vdhgffK>h+KV9F$kDusiFKw<~J7em2r!S|TEE`2v zT0Ewetbz3L_Ob=7Xj5DpFnutPOlS-3-({KFg`w8-BF;X8XRs>SeNaY|3X)Zo00nHx>T7nC3D?~&3(CRfO=u?)E#KT|~v)*rY=!x8K+a5s_4+TV8V)B;1KC@gw zj>exqrGZN!iTWN{#_A<*bnJf!2No7#V&%uKWM8_)q*w{71xr1q5Oe$a0_oteS7I8g zp4=B_Ax*mCv+vjpQ{SIG*4(M$;V+4ez~^=>*G=M6F`{lfc?ICm%pgW!dFP(z%BnPa zQ>1hm|4qfX8h-PdXcC{QVvxD$Z>z!47F42M7&ZlU5~$`42($CHf&e~2an(jV9?y{aSPGV*k{ zJ7Bn){n7O`ct>QV4C~K8t}WxfxEAYfl{3(xW8UqszLGQ%)52ri-_HM$Li#{a=#YH* z{$xJK!Xr$6#Z2Ud?!40|4$JxE2l zIyC)Awrl^v(o>eEc!st8G)B8mC-HZ)zFZ{tfP+5i-WW32UVHZ>h{boBjf~w{*-WvDlJR zr%ikleb@DHqshO(xc@Ai>#p@(s&^|I+I<0`L7we&tzU?bxBA}n1Y}eNg-7?hDmCsg z`BE9CAAB}LpkFspX){y#_%i&M;@2K$)4sIl7*1Yp6nWjSZ@D;qv@qkAi~T-pk?2_P2O# z(OZMz-TWI-meqF^dpF`rEV>9JdI2Z3A2aU)L=vL2BM2x)n%cJ=+K76q(+#rHtC>mS zFxlx|p^ml$;8$zhoZm?9XMwSgbp^1Zc`dA1OeH73K*h!z;rKX}syH+?M$;1Ts6bdt zU`Q-&X5}Ztx6Pd@zSGmY52QXGRUbeA;KXmcar(<}mVaQ~2>^h7Jmfyj-;?;|-}C0U zq-7NX7Tme7lH~UqJySmvEPJY&eS*2*6L>6oH2@ z9OWvE^?zPsc(i}$KNtD$Wh7#8x~p*3e?htcfK_e)0P_D3kV)ebR~3M7xo{(Rx_{70 z@dOWq|9?7CUL4sPH|U>QcF{F@pez!HT2lZjC*We&q=7C8xb8K6mj53h{eSN_3kO_R iB2dDqt}6gFHF21AY2ZUmoPh=dZgL$$d}H-5<^KVhCDI=N delta 24046 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 NhBYC|nyJ4I{tt1eFq;4X diff --git a/app/tools/deal_excels.py b/app/tools/deal_excels.py index 646f7c9..c18044e 100644 --- a/app/tools/deal_excels.py +++ b/app/tools/deal_excels.py @@ -148,6 +148,49 @@ def deal_excel(start_time, end_time, file_path): except Exception as e: logger.exception(f"对数据按照’省‘进行分类汇总{e}") +def deal_excel_over_load(file_path): + try: + logger.info("开始分析配变过载excel") + + # 获取所有sheet页名称 + excel_file = pd.ExcelFile(file_path) + sheet_names = excel_file.sheet_names + + pattern_sheet = r"重过载明细" + + # 使用正则表达式进行模糊匹配(不区分大小写) + matched_sheets = [ + sheet + for sheet in sheet_names + if re.fullmatch(pattern_sheet, sheet, re.IGNORECASE) + ] + + if len(matched_sheets) == 1: + final_sheet = matched_sheets[0] + else: + logger.error("没有找到匹配的sheet页") + return None + + df = pd.read_excel( + file_path, + sheet_name=final_sheet, + ) + values_to_include = ['严重过载', '一般过载'] + filtered_df = df[df['重过载情况'].isin(values_to_include)] + grouped_df = filtered_df.groupby(['分子公司', '地市局']).size().reset_index(name='记录数') + sorted_df = grouped_df.sort_values(by='记录数', ascending=False) + top_5_results = sorted_df.head(5) + # ---------------------------------------去点中间或两侧空格--------------------------------- + top_5_results["分子公司"] = top_5_results["分子公司"].str.strip().str.replace(r"\s+", "", regex=True) + top_5_results["地市局"] = top_5_results["地市局"].str.strip().str.replace(r"\s+", "", regex=True) + # ---------------------------------------去点中间或两侧空格--------------------------------- + top_5_results['公司地市'] = top_5_results['分子公司'] + top_5_results['地市局'] + # 最终选择需要返回的列:'公司_地市' 和 '记录数' + final_output = top_5_results[['公司地市', '记录数']] + return final_output + except Exception as e: + logger.exception(f"对数据按照’省‘进行分类汇总{e}") + # 判断地市top5环比方法 def top5_dod_analysis(top, district_stat_before): diff --git a/app/tools/final_doc.py b/app/tools/final_doc.py index 5dcca1c..bfb86a9 100644 --- a/app/tools/final_doc.py +++ b/app/tools/final_doc.py @@ -10,10 +10,10 @@ from docx import Document from pathlib import Path from datetime import datetime from docx.shared import Inches, Pt -from app.tools.deal_excels import deal_excel, top5_dod_analysis, transform_data +from app.tools.deal_excels import deal_excel, top5_dod_analysis, transform_data, deal_excel_over_load from app.tools.get_time import get_time from app.tools.replace_text import replace_text_in_docx -from app.tools.replace_table import copy_table, copy_sta_table, copy_table_no_align +from app.tools.replace_table import copy_table, copy_sta_table from app.tools.style import table_style from app.tools.effective_date import get_next_day from app.tools.find_before_word import extract_overload_info_from_previous_day @@ -61,8 +61,12 @@ def deal_docx(folder_path, save_path=None, time_type=0): file_path_dict["power_off_excel"] = folder_path + "/" + file continue + if file.endswith(".xlsx") and "停电报表配变明细" in file: + file_path_dict["over_load_excel"] = folder_path + "/" + file + continue + # 如果传入的文件不对,抛出异常 - if len(file_path_dict) != 3: + if len(file_path_dict) != 4: logger.exception("文件格式错误") raise HTTPException( status_code=400, @@ -113,9 +117,9 @@ def deal_docx(folder_path, save_path=None, time_type=0): continue # 第二点过载台数 - if re.search(r"过载(\d+)[条台]", para.text): + if re.search(r"过载(\d+)(?:[条台]|\s*)?", para.text): doc_dict["over_load"] = ( - re.search(r"过载(\d+)[条台]", para.text).group().replace("过载", "") + re.search(r"过载(\d+)(?:[条台]|\s*)?", para.text).group().replace("过载", "") ).replace("条", "").replace("台", "") # print(doc_dict['over_load']) continue @@ -365,10 +369,10 @@ def deal_docx(folder_path, save_path=None, time_type=0): standardize_date = ( f"{month_before}月{day_before}日17时至{month}月{day}日17时期间," ) - elif time_type == 1: # -------------------------20250429更新,修改开始和结束时间--------------------------------- - standardize_date = f"{year}年{month}月{day}日0时至24时期间," + #standardize_date = f"{year}年{month}月{day}日0时至24时期间," + standardize_date = f"{month}月{day}日0时至24时期间," # standardize_date = '' # -------------------------20250429更新,修改开始和结束时间--------------------------------- @@ -596,7 +600,8 @@ def deal_docx(folder_path, save_path=None, time_type=0): # 将数据组装相关的时间内容 doc_dict["first_point_para1"] = standardize_date + doc_dict["first_point_para1"] - doc_dict["sentiment_para"] = standardize_date + doc_dict["sentiment_para"] + #doc_dict["sentiment_para"] = standardize_date + doc_dict["sentiment_para"] + doc_dict["sentiment_para"] = doc_dict["sentiment_para"] # {{standardize_date}}全网收到{{complain_num}}条供电类投诉,环比{{complain_dod}}条; complain_text = ( @@ -766,6 +771,21 @@ def deal_docx(folder_path, save_path=None, time_type=0): is_dynamics=False ) + logger.info("将配变重过载的数据插入表格5") + # 统计配变过载前五的数据 + top_5_results = deal_excel_over_load(file_path_dict["over_load_excel"]) + # 表4中的插入位置 + start_tb4_row = 2 + start_tb4_col = 8 + if not top_5_results.empty: + data = top_5_results.values + copy_sta_table( + electricity_daily.tables[1], + data, + start_tb4_row, + start_tb4_col, + ) + # copy_sta_table(electricity_daily.tables[3], top5_list, start_tb4_row, start_tb4_col) # 将表格中的字体中文设置成仿宋,英文数字设置成新罗马,均为11号大小 diff --git a/app/tools/replace_table.py b/app/tools/replace_table.py index a84f311..b84466c 100644 --- a/app/tools/replace_table.py +++ b/app/tools/replace_table.py @@ -90,4 +90,4 @@ def copy_sta_table( target_table.cell(target_row, target_col).text = str(data[i][j]) except Exception as e: logger.exception(f"自行统计的数据插入word表格中失败: {e}") - raise e + raise e \ No newline at end of file diff --git a/upgrade.md b/upgrade.md index 1718112..b29072c 100644 --- a/upgrade.md +++ b/upgrade.md @@ -1,4 +1,12 @@ # 2025-07-11 1) 日报模板 2) tools/final_doc.py -3) tools/replace_table.py \ No newline at end of file +3) tools/replace_table.py +4) tools/find_before_word.py + +# 2025-07-15 +1) 日报模板 +2) tools/final_doc.py +3) tools/replace_table.py +4) tools/find_before_word.py +5) tools/deal_excels.py \ No newline at end of file