From e33afa6c0fc19fd564003c8401adddb3eacd4b89 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 29 Oct 2021 19:22:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=AF=BB=E5=86=99=E6=80=A7?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- img/readme/large.png | Bin 5424 -> 58751 bytes pom.xml | 2 +- .../excel/metadata/format/DataFormatter.java | 5 +++-- .../test/core/large/LargeDataTest.java | 19 +++++++++++++----- update.md | 2 +- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 660af477..f0ce3ad6 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ EasyExcel # JAVA解析Excel工具EasyExcel Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便 -## 64M内存1分钟内读取75M(46W行25列)的Excel +## 64M内存20秒内读取75M(46W行25列)的Excel(3.0.2+版本) 当然还有极速模式能更快,但是内存占用会在100M多一点 ![img](img/readme/large.png) @@ -41,7 +41,7 @@ Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都 com.alibaba easyexcel - 3.0.1 + 3.0.2 ``` diff --git a/img/readme/large.png b/img/readme/large.png index 04195a10bfef90fc51c71d2bcb55cd654710461e..48223c56939bf8ccd0b96b906d978d3769dd129a 100644 GIT binary patch literal 58751 zcmYJaWmp_t6D>LroDd+mOYq?CHn_XH+u-i*uEB!`x50u3cMAgy4grF@+s*skbDs0F zyLZ>FTDA7-+R`y9O44X3geU+208Lg#LJa_bg8~3B7Dyld-RZ9_|91iVq@ti9$uA;~ z0>}iU0fdCbghj-aRaE(eMFj*!0I2{GQ3*jY31t;^DQVfCo!vZwqW%HFeEdQvfOLLg z327O5Koa2Jt776(9Y4EJ09oQdsrL4tzJ7sST|G+5s>py;VW5<`h4s&_USvQLDj-`> zOk7D_>mwjjK~&vJU=uToq~ufprdn^`FJ~7wODo&_g6}c0@!mfE-?DS#6OzKhBYA~{+}u4q zy?h)>6Z8#?0r3F4{8~gn3{XanQ%uCE+($r^H!~~S$k;SJJqr;KZfoa|l9s_K&d)C_ zlared2!d(t=>G7*1N|S+*#Hh+0YESnP(VgVNFD~!5rAn(uD}Eb>kA0S>Hjqd6UfSL zBnY681bD$_WPSs9anQ-K0qhZYBt_sgDAT5LWz^+ZC3(Nn1_DU60dArn5*T3+E!tWS z!ENiky*&VQOEf?!fKda+kc_TV*|5$*!B7>TkFKR@qpG9_u;2qohyXbF3nwZVq__dL zWB@sJfVu#n7zV(vCafS1&{5+Ok*23i0l49&W@Q7+<)`MCVOkHuQg!eHE3t9M^4P&qK;v>0G+&fjhT5TGcpUakqRI&)0|79Sn2iWTnS+FE$On*NB!wCDra@h7wYy}68fPC6% zNef{}g48VPfA+r^L%ab*cEw#UK-0;9yym2moASl2!IOD6_j$LtHaby_@WxjE+(bIE z7`Jdwm2f={vullj>!84D{v5TCkbP0l2U!4MM^siqOv4*`Vz6odMH9QnIq}}vaXyzK zf_?$tjC>v>D+e`!SjkHoh+z{F#+p=r$8U&6@5B|;x)5W0*wMFqMTaB1k@a_jFMPp! zLG-^=lpquG%6V+mwH`Tx^4t1RrFHYr9t2(oc=fEU*=oqyo_@0X%!;G>UeiO0_?gu? zZzecC8Ux;sXg=A<1eT0-9B781lweMjx&EBo9m&q1iH;mx+tWu zkK+>*t7_Ok&D5X~w~eY6;IUHF0I`KbMiNELl7qzaMihF^9~-G4I^R|J*}1b(;NsI$ z2W`wVa0H8(2VFK0{1}1MpF7A)FJdm5w&iQ4v{pZYVaYVn(O32T+LBJCHCs@$U-IdN zOVSfBVi2lq9+W1?WUB@$lp`UZ8|9TGe~VPtOS2WxWm1uwCHeQs0ytPPWl@?6bxc;$ znEwol3urxhr>>~T!jY4t|0=0nR~e^lj~#1gr~AN4t)<{-lN#kWJQ3++Z(qEt)nXU0 zv#5C?T{unFqW$TlwuE~dC&)Th*}nRVzhjCzr+-p^p{iDHekt z=m4_(Zskz?Xql(r6eQO1>(YeDOJ2tm`Qy>Pc=7z$ClO=}SgOS9aP?Ky;W1`(k>QcQ zRFUnc9Nwhn-w-FW(2QHELa0upM*fB^F0LXDy6^tA0mn61O2ZgldX+y=DN8=oV6zbR zNbf0|j9w(X%`eC+8_)h7Rz3RUC0F(%i1#EbQd!2D80huaOTKKop%d%iv^{aYfvBYr zvx>^=@6W=G6sbIIGP!Qw-$r_RD1|f;yKich8|#>?F8X#8-X4g~bUs-a#ys(56@?wo zi|d`nL9ZTOwujkez5&Yt#j63ufQQ)WP4jIxAIu(VdSg!iiajTt`Yhs}vN9XZDrURE zx=@w@|Jq}im^ahsubQdSIodrdWTYFHK}btv7UEdcWi z%%Jx;qajRboA#x}hXLzg`4|@e-ZmHim(#XQQj(V5&5ez>^^-)Y&acN}m=`$ty(9g! zdm7<0GM)cOFheH!a5LoDx(v;6;t=b@zQ;n__Z=Kt(u51W>YR%0{dBUK)i!%=CMPgV zSL|A=i<#}1Z9#nFt9%F975uuR+v(!ugW)}yrvN`g#ED2BhsGmn*p1c}-|PNxr^HEU zI{SD%BJ%d&0Qa&`FY^Afdfxe^f!o{bF}9au$Xati>S0YkHu4<&GPS7o0B)W|CE|_Q zp9oKWb4U8#q;u&X4=eN2rorGkWWncSMg)w@RZ%I<7f6mdf@O_t0*7~9R!^;|2XN(e zAAjtgJWvFY>Q)T|a4PuGCV1CRyYr8aGd@I#Qr-;=kh?eQLRiQ5mjQGho<$Upe~^m3 z(SNLnpU+1!9?<(o%8I>nsCVf3j&zruA3?vQIKg7(NHm5dKqfrHD#4JJ_Pj#QEf1Wp z1E->!DOi>fb4>BOz#lKID-y|m@y!(thRzV3VI~PH#+Lo;3O_l76}1rV=l%5UAKjm* zQRl{26$8RGlbRUmiD^>pei!>m=e_T+;Obl+W8cGl&kvsHj`fgf#LdIU1=^%nEBIx4 zHBSGIr{SUjVZJ1lq<<=LdfVvi8em{$|KS4Bt)(xF?pyMTY!oS*H*y58&D~3T?VgBL zQN!n8q@|c+%uktq{k~0Gt;6^{w*;IXmi2wxZPv=;p%asskL}}Vu5D@8XL)y)ce)muMet1XHdgN-G#xbMu*I5o{HFg z%%!AiiPNcEhEh`<**L~)pi6A-J8m=PF^>uJ6f?M%o92@Cw7tx389XbUGn{1!k{rky z*&L{?UAH=))m_E&I{PuDZRCHMHI)R=8~-$oXDl3~3(?~A=XLh9GfAyT zzJ$7x>kkeb@oOLDd*y~ z_p@AR<=hN*8_t?B&TPR!GcM@)AKd5%=SSSXM9y0J{R1{Cuvx+-u5X1Y%g&csZ=SF7 z-bAQv05f}y?3FIxmYyt2!Gq&a{a4}V;Fz0H)=ie@yshM9m#6>}(S2M0|C#f7vD7CD zhafyXbj}Pxg}diAdLHNFc-qd_ASHAC!~es30E!aD^8fJG0-@^>u}$9}ut}m#46tND zqNzE$vl_I{KTywu=tP;b_JwBka(U5<7(WAx^HPAjS^){c^ShKa8IW1|jS>7r0cFM* z!3dTGXl&F!x;ogeuC79>at2s{_RrvMk`0R2D{l|D+VlTQF~R>Rrt=@gF8)yrfO>xM z8w7{Fl;z2Q(O|&vW$oP&n=h?vY!Cmy60#t5)L#Ng>vOF#0)yr{wNMY@lo+b?3S>anyX(|e^TGx)N%}X`3mhX_(`NTI-9dl&rzET^W=LbYNYLFffh>=4c~rW>94?DFea5a>QXswr}WtkVbn&_~n3 ze&VOF(*B~Q4tNN1H(XsX1271$yp5hGSpVB)^cd{_eWiuFIv&<2sQVsaYHJ0+9Vx(_K}kh6|4uC`FFA?$G!u#N^`H zEuE}Hv|!slQONq^KIV_*S3}o^ahb5$iZQYnPeLvFyg!)uAVNqUSC9Gy?E^-|rEG=E z-+uU`54-&`HK3(sRU6RH=1!mMC@lN1k+#;6CGAnXKeSnDWHKJ{HID%kh$bm+9*T#>(YoJ zkjM`xSILVfIuw(9@w~+Slbl~)Q3fD0b#jrAFS>t3Ct{u#qW!cs26Jpi_>Ty@8$utEUN*Ku9nr=C)D6OKC{k+WnKXGgIQkhq9vdb^gS zJ=?nDGp-fBCvCr@*`Cer-*sqXz&j8NwrL|}q{mmEXG!`~&Iwi8<==ixMa~iQab&qc zUQcFZv8lG8r@f$kYL5rbvhsOdU2N5m>p=J&K#lu@OJwaWtu+*{ygWAQiDo!UeTu|_ zJlYpNRus+NGL<_k&0!JQrY<*6u4ar9$L9vo!GE_>a&`5G%_7VU$d)Q7be^vz zhimEqH@hzrK>>6$=5-qltMLbML%xkh??I4E9{!K)95#Hp2eEdOBYCEveYjEO znNc0W1_lgQax#wn0f9Xp1PN2aan@>kI0M_)fGjH`_WQQ99#5|i@E}oqBS4sjQm&HnExX1vQT{+XC=7BtHyR8q- z1$f{N4^O-#mjE7{G$&`=PoY2VQB=?Z@Mn70mZI!s_Pz?x$fc6oQspx|*C%yGwmS4{ zLAW7U%}w(%3u)!9>TqLHx8OtS6nf)RXggh)(I_+{$z#1R8V?*pw-l#!Hw}!cFufW2QdKG^9t?Zzd*f3KL zNG|&MCf_hUkHQXa5*4bkKQeQup6Yx#1fuW{NdBf~*wwcPQ9GOhc}3g|sIjcRTv{5< zTJ;7#repyHmI#z^c`}QuN!1~Z-#Q~6ALb&ELkO*5>%;zhiNP^%r9~x@m#vHvg_Ure z%>)fx2Nji!_Gr0P z7Pq@!x_Z7cXY9W^4}%K=H_q(+e6t%zU}A%mHVc#Lb1{$v<3a-%HBi$MwvxriUoI*? zj}XJiZdI`jHCXN9`aIXw(CW{XNe%z`))U0?zSi}%v;ethLHpX!tD^mN01%Cm-z1w# z3V3w4a=e-$vT5>MDnyLvf*^*HA5Tm7e^zb28l8ACI)QfU+vHlsJJb3GVWAR9^2Y1s ziW1W913yo4i7^6+T)CNGHb0F+>h%0y8oD;7xWoRygYrT~Z!806O?x$|DQjj>nRmxI z<7x}(K84Qz`f^FMb9z%%O#(Ga;IB{?N&5n(w+_P-)9@Ji%ZkD+wiJH*AzVWaGxSG9 z)?OcCuT*`mtCjU`YhbKnT^b&kZ!$CplbYyDfb7IknnMq>AutMdzzyqEDuGXw++Mq9 zTBP1hE|#r;2)wRFcAM;9xh%a$O}4p}^m0!o;d4LRdLphJU96dKw%lsVlKSajauL{D zUYc&u-~W6#Tf`J8E}}z?R2?zm)qSS`(fNY{+D;ILf~e6OY4$@+X!cW?Kar`1??|&3AS#5%g$pn%!?xy4%MnVp z)9sg96}V@s(d#7VFaA~;gbix$4d$*)Ho5W(ko6-2LgP~Dt@2eGH5y?JxXOxNi*w4! zh6tb=a$)(sH5B=;_JnE?i&T8lNVEguJQtpJ*aec>>aaPn^kP&uN*E^*6th+(E}*O- zAUjw2`R0VkG%p_3>(-8xv0s$M+E+uScHLa%bt%s83#D9$0JCC}Jk*bdZ;}Nq=8QaO zhoDk`~!r+Fm-)-q>+&+tPKZ%s|Y^dhfsIjaTaCs5}6}{2x7f!rlu|*5M zB(81wN42O`QOHDGb@k%F!MTD$7Q6e{ige3RR_AaN0Kz*E8103A<{)$;$ zWfpyK88Btt!h^UBy~R%#y6YI57(X--RME5P_9pd|YEqhnQvMErPsI?Iwd}1d#mz0( z+^8LjCFym-HFvjpX1IkE2JWL5pPon8n=zAy++%zfR;}>Cs!hc$g^_8Ocl*G?rmAu~ zwiG=gc7tIWSX_5p;yr3Se~&%`H9L@YEtzR4&#>~`{hZ|#E+Fe1xt!3&cR?{BLbzv) zT|=qO{=Ynh{5k6MnPc`TK;zhHKMXYNyZ-ApqcK@kus1j&N9Iu0?wJQV^A5&k8+st}`BWF#uW;1zs; z1X7SYkmd~g5|Cgqb^6B(_G^6uXh9EKA~!}d7myW%$~!K?qKlYW5_!}5gs~N7aRhGj zbNx-%rnmV1wvN;r&pk;3%`_i+Ss!H-PQ3d@mtzy-|2r5q!c2}?A1t{s%O!x~wcw7~ zJb^Ss=lz}Fy#fLae0@o{k?fZto21={1&EK{9duI=Jfu~Z_r`7YGCsQG2wU*l$&@UL zbV2UC2DRBMS#w)V8|`+tspZ4r^nyi)vL(Kcg)KJukl0Z;Aoc^dxnoR(SkZ6VdxE&$ zo4VvCDHCse=1^R$f@G-|%@a%j(ZxrSZlR(lzE+r0k9gkbKWsr)p{=V&A7ql7;Yq|_ z8=NxzJ;{c-prTis&6Zbpv)f)pyXKWo3$qEUuh7gvOa1wuOO7W_Vy4`KXfvHuu#_+W zT_A($u!LVJmHDz?Zwm`+9+QLSYCi=VpU~_5(KE?`vYhQJ>z4o>t}$u|9OevZVVG#H zz31t=Gz<#|M1G;f)_l`GjYuRfR#t4=l5=Bk8J}$W5?43KBE>ax&$h`zTNP6BL7W7!Pm!^cf zl6|P_Z@ehZE)^+lr{n{bp7$!+v^aQlLlU(d_@_~!7Lx2Ib<|%1igRm7Op(GBnouzM z_CM_2Cd))6jkeoON-x}ORMhu8W$Ug!I$n?9zC7EwF;yCas1A~cc7NLoMHL|kV3b;* zz*FpK46I5g5GDL2W~;$1BI5MqR9D+a05MqETp#V|8PD^7R?PY*rc-z&bC5xNQgtM zXn1PnICzl2e1CQ&5l<*yB zb9zBeryN7G%fMn2hm)njDJz|Hv*J%t-AkFFHWd-KG_(1S@%}2@EIn@+?sIVvm-L`L z9%Z;R2A==ENZ~XT1og@FF~5fB`2ST#Yt&%HuhhuQ5QVH?V?RkHtZw)uzJ@ky#1hpnxNK0!M3KfVN9EH`VEQCUX6!|B;kyr zh2-u&SHv}#o4Es}auq$%y<0~REfh!&OD+maZ>|(wtYyHSU>*`(QSKgoyW_w^x9a^v zXU__b@GOOc_OF_c0^LuqghcjJH2t9tWH^!jLF8rU&!3IyDe8Cn? zOCZm-xHo-~x7iJ{VG?7Hhz`5gAGuyUvoo9KjC^vq*r{W|uO7@z^1NSgFMrbEDWC~q zLD<{MnuHmZ>w59KdCj-kRdby-b*^P`ZH6yh=#K;9+BcHc)Dkl?5;H208Y<7J_b7QHc`|u`ecZ(CGR|F)H=7xYa)CUE}spm^GVc$9Q zfrWpET*roLce(bFaLip5HhZ&zQt3sBsWxPcowb0|N{C_W<@T3SitDX-A6v-7FPhfz z_l%D}HjI`26w`M+-o=lRZ}DS5s+J!nTB~O2^nwN1=?+Qw-VO1DwP>0bgRU@d3$zRR zlj&DF8OkbUm!M_UkG8>j0rawZ=v|!a)Dpvc?nbkj-J&rIEy66z)D$&jDV^3S?iL%$ zY2?vzM(@FH1dyYz+NZZ(>(@}ECS84_+2M3ElUvJ6q|kZppNCVkH`dYL{3|U&Co;I| zPthWjf111oa2)9*OLqd8N&k%|b%%6q`B(b@?BX52vU&NHatjHu@KqY#4-}j+Pl|6O zSSc1Rj7)wVh(8@CtUtooDvRf%$25veWXJt$m`Bj%1>otddk~*^uEu9%+dvE|8eJkva=YFv14S;eM&&v|zxETuf}eCnxV%oU zXkF7P9{>mc{G+L*g@YtbqzKOnvst}Y7&vpBFpj~YrCEF$Yujvkv~GG?2z^0G6J)XJ zY!SwlrK^*(O)pnH?noB*G#*|v*Ud_g(_VYaoWWAr6y_T;&euw-b0W*zzsH%_eHtFQ z0Y7h~Da)zi2b!NtH5exqG(BH^`B?byY~1*wZyXc<=LJ70DqcBiWTbnf^r>iF7ViR) ze{2650}%9zGra40l2H+x_kO1R$=Yu&kZ_YNpzTws>f7tW)9|i9;G5&Z!B(xe;3m=8 zr_Ork>GKKmgdWRt6s@($kRK*i*0WR}Q6odq`-Q+aO(FYgquOv!h~2l#PJgqsztof1 zrq-o3!9=)26B2w#g~oE)zUWr36@n>%UaUc=xQ{DZP9s`npq(}<&<(}u%N!W&;!Ao` zra0Q8Lg3A7EvU)tpVGsGM{>%{NCZJ+zV zB%9mg@1ze6es-GyQjvkZNh8DVQ@IBWnMo#Qy!P8nkZpK-gnEz5P6c}v#L^m6A8zOc zlh<>>L-=0G>+l~C`_`98Oq%DpFZGjKzwh2Bw=#e*8RLX&qtt|D9tA%x)qoXWa6e)S z90%3Pt?>}#zJ{q!s3JPb6HE-Fti@TI<{UY1tc|V~J2d~>Lodvt^w9$cB z0v0}~iB=;vWN|OL92Xz?xcAk{>5t9i9tU;w{BwaXP(n;5gVf^s!Y_k6y1mz;E&)Uv zm08Agt)Izl>L_4Obns*Lnv6;%VIbbm*j9i4zy)wnHgKt*XWvQP>y=}FO+&dI1cB6n zB`4o9jlcZa{G~Y4Vi_3cBx4LMum?uos*gA`ry6u>5M|ZbEN@2l5b$T zb3edSoPAesyX|)%eEiAxJJoIqcoA|<@1ob*N6CF(c^NL^)leK}Z4c)^fz8ZRrlUzf zgs*Cm1P}2J#*sYF&47XzG0YsnoeTG|x^0XJS1jfgt`|TP2J3xw3aa9gkO(1FKr-A4 zRN5wFv#PV_)dtBtT*oF^5MmGaxmKKn@%P-h>rtoh_lVR17^=eyH#S|GBNcJ5z5nN& zTOuIgIXs4MoN)>zc6;W7AtcbU9B2vIFH6{>K5?2#A`tjGU^z*jPATJ(V9wBHv#=?y zj|No2XkGnmZ5pj(!5?hH9*5D0GIgdRC!K7YwQkXvo@l_l!}WrJIa~9b^FneQ_xBNA z?u0s-CfZR}f6MD3>TaQ7@sG6TFLN~MG;jb!^bc_TTv0?W6n$!OdbeDJO83foK7?52 z@82Xpo>OJOqtQpF3#{k*$coFCMZIk=+h^nm)0+}c_Q`t8=}$5P_4?Q5@t$a}WGJBW zd=aCBlurLi0&xNmgqE!bRRkLsMkEa1oot>C{3T*@?B~#I>E2MJZpYwB(;?# z1g;m5-Q}Jccz*sG^ljYZv&{-L5CfX}1GjxzT-^wbf>Qj`vBSvZunTu!tLL1f?%ni>dPm?uAi^2cX_~Y4N}=<1t=`C<~#%h8TE+H zL!0`IQ>8))c0R>CEtua-yC3Ozq{xR9btF2gITm*QqVI)jC>HEJ2$vEBX0;Zo;!&#! zs8NFgFA)K+Ke>8sRg~(vr*KGo0WG1@&GwbACfxC4!R8j@N#d5j*qj*#nBKNdk_Z5H zK}a4Qy8O$*3$Iv?V9P)W4xq_&s)^SW-3*Jof<@~%V0am}7x>F?HITikstSjI^bcyL z^m8MJZS~K$wu%j}fVEm-ay62iO|54={wr(`bQuKy2{QfB#kW3gtFr)`VndEK94|C26?fU=aKIY?-Ueb49vMzKBU0`XRP!b~?wW>9@%EJ#K9IYAM7Z2OeMU*6- zid>4tj9FNet$hc}_|KN5BnxSm@8y2bWoob0?MZtl$G2}tA%^)*z`vDMb&po!LHa`L zX@0$Ft>y<&Y)9;{ZFptcyRp~fJ8%6S-4&j~teDx1&l>qVxa_F~ZQ#!`D0|Y_&@%tB zdgc&8<}74}q4fgUk-|q9M%Lf{39;$gkGc~I_-$$4dZbJrdiP^WHbu-O262EBAMf)FlVD$Nh1UFOf*Kt4#-aCfVtP-fZ8 zVG0~ki(y^@1@1oHY{b;z+O`y29zODj9{i_CYU<_BgH7%iL$`yeW~5OIJ-yCwflw`G z_kn$YRRC=n`gTVZf&55kqIXCEU!@Q5$dNljnUqb2A)&X}Yv5+54j(3rr zK4D-~R}iJy;GswG!tk%m^-UR~{Cn%fTr!%p6OZ3hq*KX4vBeI4okR{R8!7H*glnZuX-pCXYa3(+`2;To3EVroXqIhg}rh(2YbRsqFo_KdbR5#0AE@_5120 zI|NlPzdAUt2F$zjW(^PmS&Dl*gL0GZgu9U@BC0PxRpQHbmm;8IhvqHturrBBCaVPb zt2m-5x2RwE2#JG7!v%jBFj8<4Y4~<)nK#an%V)Gpr8U?s@cs(Bj(9r!y(gR^#9DZ@ zBS+tpt?w{`r>FCcz`rq&BBi}EVoWAKKnm(Gs-R#1kmJSPCAc)Rm6T?;TnowD|4>`UX ztQ#~4#KbUuZnL+oF00jOk=+3?*SUx>IE+NX+sAe_}i@-elb5huA zTZkXU^N!hm?ZR@|_~3m27wh#B!9<%L{PY_p5cvGqRbd--?7#t;*OFfi1=Hs_U!Mf9 z!A?KBL+WAaRi3p6djs~E*lHyftp>ec72)&3iy3jU9cR;==~x$qRGUK*SO@|1!I8ev z^b~O#+MpJ&W+~I{gUJobAhLf*0zn&!LI|{%Fc5muO&y1uNhZ8hdHIpjxUX|T*;sHr z#r;dV6~N*0k2kx?FIHk_FLo)V)XOvPCb!gDOPXRmsGV)Kuzg&!(LOoalm?13yvl#z zZdxrFvtKc2fTpASh8ImmAa&?V zQiUS%bL@~@k$)Czk_p*vTz{i|Y8egGgu(vtTD@IymJyGkEe;ioz7%O~b#wrM){ko0 z^hnzxSEd)f4zv-s#hqq*Nf(L)HNXwePbk&5ID&S44+icAn)B^DCE}xUlA%B}#V<17 z?uFvri5bXtLV(Q-$P;5T(L%9c-5QzI?oF9hmkSOzQq_7?t~Yv5w zfPS^uJkwo83S|Y5P3jELLHEcTMjW+}JiH`Df9`xDirSHJ;Ixxw8eYZdjz4?3j3ots%fQ*aLy5cR4gfVRWQ2;vJ^5h@U zOQZMg}1!f0~1cyuCZ?U|{Bsvmo$=Jf>~T2YlCi z3l#zd_P8GU$>aApbQ2EG=4GOBXWdTjf0TOrUx$Es3aC3a$#GyQnu45{_^1iq#3n+* zlt??@MItv&jXV#AQ}c1rHT;~k}JL?HJ!~g}<`uSqp?!;LRS+EYD z+mVd$T?{XFhNKg6RY0aN@Xk(TsMW(|^A{Opq4eae#j`YEA!(wnD@%mR-kObn{k|U- zDdLugV{p8=G2u%*99lP2Fd^T3VM;=%14rBgi)qxc{J5@*#QqOBfFrMy^$B|{F=E7v zkWChj8a5AIid5(c@_v!|emHtt1TC=IMfM;m93^*#K)hOu?8md#lBPNhBx~Agv*&Y7A zo;6>rN#~83@7%m%=HS6k)7e!CdP$WNRkAI_v)tZ%@%lULc;GBkKfa!w*UzSD4P&BeeI)NAo#(9HB} z3ktgtfqpc%W6<5V+1875o`}=yfyL}Iw8PJ+b)yadl=pkQ5(#W1SQod=vzG=#?RlY9 z9+Y309az;$`{9k^7#8;Olzueo{M~ny`%9$yXVHy4>z1Q2VFK)5keHcsTK|6Y2EIC&n?gQc%}R3n_a~ zZ}nA2Lu}layA>ga)(yS7PLv4UdpcHXir#lVGK1D%;6d-e#eM!d4BbXob(cbC3`}Ql z3(&a^E^FKAGA5p1X2=JCJ23Wa+l)s2Gi6Jam&BHilgp&brAE0|_ikvj4)kig9xjhV zIkE_Dc(fT-lh$f9dUwgc%zbj)@{p}}XYpWRnDg2sk{balVl>xQ_M2sB%TptyfYy?a zsiT5k6?-ndl(3{pWf}$c6ER};U~>`MKt;GG*=&8O8qQ{`5_D2uRs|o0*|^82S*r}j zFL09BofPyry^rsi;{dgHUou@qt}-~MsuZ^zZR##0#6qct009WavYTofV=*qTKnDfh zT|U=IKS%kNlPZnH{0o{<71{*rHV}>2hQorgB$?{SM?971iFsEm6k=logyS_3BnP11 z+&W54-Y4v1j*N1K;7PZgN@B$IQcUHd;%h#HGdMj+_2>+6X`(d z@@CZ}h?2h97J!gJvOko;Z0sR6VKT~!igSikZ02jSHmC=)p8o&bKlBr@!HO)_E0eX)3F=YAI1=JuFq!pl)t3`kgTqMfh9?EfvXQBnOHSZ zBpXlOzE`Jz62=Zk&V^sRuU&$Ad!8=37`<$dtzzaO=5O|GLF;p0{S@m9k=@C=dEEZ~ zK2)qu{D}I8b3g;6Efv+=ZmMpq$NSj76YV^|6jwHX)<4-8ht&R1b!s(L55SO)4?{*y zk^8D*5qim7C0e3d|MjOq^*-|2Zzr2CtBjzDZ&XnH!Ub4T?7tmQ44%d>!Q%8kAF1+? z`UaV-kf}mMThA>(i?{5|N#?>{(BNIQt9?crIyF#Aut@B%kt&=svhwaQJkA1EEJAX~RIsjpXqLb)n z9^n{#FnlR99}{^S0`D{WNmk{um{G7Dao?i3kyE-~V7^O%Gcwcwk*z;SF+fwvRan3g zjOzDH?rA2F8aEV7-3V^%!?1paEi$X7gri300VLC;;NhT<&LK40VA;GieVZKyrCNK{ z3Ud&ZF)p}xC>)m7t~Ay14-zC)mQwC%wMx-~+CByYYg97XITIT1I0kS*8WRXKisivQvhV#0CQ zjK=nN!TwaXfhsoJi5FELuqU#G+B-wlQCxODf*d{w$5!I!ZYc@|gur(Vv5%TUBtsGujUuU_1BslD6AD1Bi;z@YZu36UsL9 zX6(xvx;fPts&VuLDxijJILx$?& z5K9+ubaybCBph^>FZd!msL6-Gwq8NK>yAz=SY<_uWR;jz}{1MFN6VI+KlCvyXRp2AOGj4v8Tpzi2M(pXDF+SfZ?$3!^i_{7kb&tc{5n$!ejUpU)Lya_`& zIVABpEGVxQ<-WXMo}%~mX2sGL=`i9{FG9}NU!NZ0+Ds09*={X+KT+0i2*$O#Wt}9> z-4$X9Jw2364j%QE$OBh@CM%j!G3DNBIn{Xnd?q3)%g@gb3mX`ivT`F}pxW&~Jk6j3 zFHY-%JHD&n4u94b;7P)jTgIg#agdeG0>7_s|^9vB`pd^9!s3>8D0e$Ityu!<=c4%w)!o&8e z+UacLZ718~!%gBGH{_id^r5|y<0;H0PJH-F-eR~j+EHs8dTxh!t(ML-j9r99Q!rJJ z|Li!Pw$tn+9rQCYWrHjW4CqnnUWvj>Y9eBPC17f*HZ1>Ct#YopD6*S~MB>o?ACh zHOdQhVCkN78uyx*v^Reeruz)<$iFIDX=9Gxx&GE)Qyt1_m*UDrY?hkSN-V~()Z)lE z6DHoBi}W6fOdXrMwRvTPzEn+HSBHw8G8O%fkItj1OOC05UnV!Vp-J*&3FStXssC)- z7?bgI+;$##tx1uX8%&fJKjI>gYP|l_@A+ZOA(LjW9#^v@E!^H*2!tiZ1rp*4TLoJ^J?6Y^hEUDr~pH5Ebng4M>^zB&-1i z0P(%Gv$=crXrn7qNyV6keK69v2c<#+GArt6Lp(;FWR^bi)Rg;gNy4Rvl;AGQc9Sx* z{`dXAMFdDWrNQklRdQasbN-Aj+yL z1k=OcCFg-uft*ts8xB0Il?PMf>!{YdLe6!FpEf zu%s3V+|o*h)OA53wZi(huUSlkfs8oK5FVeGAZ-FozUkYL%?@5G1&&gN{oUt-SI^cq zp>s}XEb^s&XP;hO@F-y+)k*Q!?gsSIq;_s6KR>^b4A0v{PAUpcaA#a3hD?~VS9vp@ zXs-U?&L{-b!Ybk`f2h!Hc{9-aMXkbYcmc^gVa}7!W))S|R?6M8WR>3r z*N)i?dz0oN1VHu@+RX1j(5dmr1g=GaLPNPnnEerAV-Sg_QKr-?xuROJ#)`HLrx$A} za1i9YBGJkDQeNs72NU|ANGt>!jcIN4Sv;ZWpMpm%4B+zGz46@zmTkSXobtqT4=g{i zaxmg6KxPSS+M_~W%Vh|CFSh>vSnpwl8vTxz5_vvpE-4`k<~GnpVT!gNScidPBnMuK zm3{u7O5uPGN|I!#e~Z^0WahC2ukEgdA0&Gj+0^2sY-eX5wdCgGU~ROk8ZWOK;5rOS zQDGsws5bxp%kA!h4H_zzn^h=zdrak0wQt6F&V@%g;2zS+xI16dU0#PTn|-GcL{oPD z?W!n|Lqvp1t=rd@o!0-_t5dmm-t+txSVfa8X>Kq3I8lPp3lHwD$Ub1cFVrEGTy^Rd z&HKh!Hnz-(xotnHHv^;=E<31*r}z|4t^DkSAmK0yXMyI|<0|g+ClqXo@@>@0D$1Cr zk0!Z99a~}BraqpUENh1%MZ1?O{hS)tn!{qmHnx`mEW4dOGC>v2NCLSZ`~C_^ylkiMM*gpspq+8IM|7*S#3p{QEZy}!4ylI8QK4U?#eWH5d=Og&zJzJKH8g2^D?H|J|UQ*GT0T}}S(f-fjl7Dw2!g(!sd?<*#xZeTzKjh{&u z{&Z2xGctnDmDz&7*3YxiOc9jf;CK4 z9Goz%#f35Rqn{2P?kbBN_m-tNDw0N()}&BXI3VRtlXJ>DNS9v2y zP!qrtfZm%p*8TzHwK5iJj?|FL4WFl$7JM8wu#Dj>Lu?Q&Yc?W_)v_Zet~O6Tu85gV z6p}3ZA{MP5EJ_SZmCPIdCJyU@jNC)nbCKcH)mFE_$(deVDq3K_lb@Y$KKJ%^KGo%O z{hK8Z6Hz;U_fT1c`VGt@e5&d6_p zJ4{-C$uT`-oN9e40)_O=2t3wK*=i^}bnPRUOZzc>&5u!fMC5XdCGhEZg7!~#YzX7T zjCIg0$DKWq>Hi0bKz6_PkPjS~*2Y8wnrn8(E}4u{k?tjL*&~uPI=$4~+N`c|a$-0c zQ-%y2UtU~BgFUoBR~I8ZzOXn);M}s%iE>44!<-^yG4s_M>(%Mwq*R8fmXv4^jJOoL zCbH6o0Sv?QvW6BDsKRBF6l85=lPj67uP7k%B3N^Fuyj> zb#b-c@J-c_+orYo8E)W701g@OE^(O&MmIB#dvS@|PsLY4ou9P>2=HHj?90C$ZQX@V zF-#+chE;^C?|I;g6N%fyhwU;*-_c?(px3Ho4-wXtt|Y?8rSw+sUIR9~8B%w+JnIoa{#U{ExpiaXS9q zgF_o2Ze#=3wc$EL4uK_#!;~7!>9D8+n_oppu%SqOE1QLKwpc}Qk~;<|9Ov|=q_+u_ zBzJ`{S1Xpv9V5XTj+H|j`q%wh6G@2~*2Ng_^++;96T+*cu#SbP#+f4}-*rRRuPtI^ zF#}Y~*0pZ2)d!w{HMxVNB*QR1Qb}ta>U6o;rwl3roGZEhtZ$o!lp4JFol37h(Xr%c z%$3D@*40bu)@~k#SaK=!L!0;Avewp4IMmZ3Fa5C6VS;Z zpo()(0FLGTzy{jSx1P*um}juS0}ou^5B%wfNjQ5ZhUih>ZUpYXu(OlMM%O#!Fs}xOGVL~Rel3Ss!)N>W< z+jWQE$ZO6>paZ|C$55$T2B9J~QnbEbbeCktDYcW1g|MQ?LGsQu{4nqHtD5)2+&m}~ zXRV94maYv(;Ly}iN`CVz8shH*hz*R_S!v_sa#>2CIrNesOENmw&?pV%>0rtI{@X)6QI*d=k}kz`zS<`Rlt+ zBIs&bM$vROYi%K)4>}M}@$=cpr_<$v-VQqk)M#duB(Q~2V`;aRD_E;-hqX@ynOs@h zqH7s<)6rlf!xO3Qx_(*nbJMj6!jiRa2@N3tt8iB9;LAPI@ppdx0rrx;@|351@EN=?%E|=G$$eCy=zq_?^MNaGz`sVDY;BLCI>vd4 zb^O55CS#QTMt@K2W!3GNJ0hR1S=e<&5iRN-%hB;8uY2&ppZxUKU*_g`h2!kmn~^`R zUwYyBA6z>yw2{|Wvq2lwrSfcfNh#fOR64Y81ZI_&0Ju^@GdZ4Fq@6T6$@`ig)T$jJ7j-U!^mGHV%QoVa9p)={T1?V7WQ$o-y82 z88nLkNZ+2Ds|6=8@v2dW*h5mUp^@ttxo>>rxLI2TbonPYhDw3=s}@P;Yd*I zcx1c{YimX+lDResv^=3Q%28>h*d8AHJR{<51peK^9=!WmMQJG!Hq()F9 zz8x2?TV2KYHIFhYj3y>TA2HAjDBwE`IBI=zwx1~%Pe!AZ+4cz@gHd2gHeB>zN;Ujo z&O>Hf-e&tqmJW8bE!N+pJdtrIQ*v!pA!WwgatksF=B=$ejJAnbFF#x~z!P*68)(*x zep|(M3&V*Vlj$>ki*DF-AS0-Eh@1s&TWCC-*S2oRbB?9+ji~&(d%SQ1A z5@OqDuJ4PsWB7uXX*w7z6Y zzzIs)-wbSrXlTezmSO~`DCg^{!w}r{Sh%YULllCjP2X>k15nq&3VDQBDB5MiE-8b( z{B#Rc*SUf(Y_->8X<5dokQ_yfM8AHHK%E~PSR(-uehiKaeZ7jFF+(Nb}rbiUpgEPDNoVYLAPMm$`yE)wMzGypr<$gk& z7~m&*@Y;*EJEw}=dxMny*j_h&gxU7~U;K>amp|jP5twX${NCWJuKa+{ptv_jEZ-e% zxTbZb>!83|LI(hr(&T{Tqk|p4`l8tBYE%;gV}7KRUUcuEdhJjY}LbTH5W9cX7r})=4mHn!at3#J1Wi zgrE>xzS}XF8L*n$7E~2ApsL~4gtKSwB90z)?B|P zwIMXE-7@mb%2EBQnNF`d082W%#kyqtS|W0BIhPH~yh1_>bAE+{Y=X9(#SbQ=o?I9* zQ$y2}lam)1ZIy}+N0ex?ouHg^iyMgCckRx@;WEM<(02RFD;K-p@kov9>1_KOq@vrr z^DU{1cSPGG9>HjX4?g2P_rWScmu)-7_{o0&Z6f!6uI=pWj=t{l)n7jNy9Xb9@aBnD za_r0Z9&zSM;`G#`4h(H`TGxSy5Jr5r0S;9eZL!4pqyrfOlksZhuo_GLvuJ~+YjYl9 zoY4jbSN&iMGkp`RA=+Xkbi*|o(;qGSlj(H*z!K(b(iOJD|xf#z0uMi7V!eg#>G#3OE)mEj)R?6Dzb zhN}6=%Fs~VuWWKZ4S96D?B@!BorXiS?T0pz+p!j<+_nNLsa*i_<$lWu{JHv!SKJY8 zvQzVEFN6=ik8RrnpKI&dp*L+(?)%-*)-B&nzxQ%dzPu{>!#^iVo|0 z`qSbUV=(oBgFzbuXUWwK072Wd_UlN{U(Z$9F(Va4r&n0@{mO+z>~EostNF&hXlq&B z$|%-Zq!DSYWIQIEoxL$*F0C}5lzG%Z%b%X||hU6o6@mw)`Z=;5lo{9(ftU zCf`qTPTF5lz)G+Pq65x`*Q-3yHgA6XzOYPBN8NkeUmYQXo?})!0DQNK0aH+L~intfz0Ng{H zJCZ@1s1)6XLpi@T;A(e*P>rzVo74G2wB5yJchB@WOK(}BTViLmL2_@&-hgZDw0mXh zua^<{90ft!nJ>KW>V1K>n=UR<$dQwGHAr`SME)~9=UzqDGKT~B;V1s^yFY!`)|dE* z8}9}pZ=-?LmRDIz10mCbIA>Ah(w;8!Vv}I9Fi}o|!S{?u|<1Jf1sDhILEX@XOkAqi`o50L3|WKeUli(6PEoeTGJPXu}C|sOg3+#d!#8+ARZZ zx~|ku3fGF;H5x?%K<4FeY_#rL*9QGgO3+5C5QJqN+RB2$F1L5kw%{Eft8w8uq>?Uq z1sk@JOwQJxoU{HR+U}0FoflU;Kz1m0`#UYa_CuT8FwRc9Lx1i30epzcd5%LVUTsGY z9Bq3x+`n!&)NV&y4~733hqm2XGP^x5_+ub4;uDhAaqSJsLb||c8#1etldAwqp4s-cOA5hJ z6ceYu;aqvv2F3i=Q(~!MRGEdb>T0eW*z7cNKI6NGHosD_+FCuPi0VOw+8>>4OifKp z`dg-8XQ!tQ(RLTK9f@Smis{aj`^g@__IVXWxYXG%KJ^Z0gVT(*n8cxcVEpLO1D|Z$ zvANl0Oy=6|j>Ta+|0MZ*o)9(l6p`p%4Cv)OtBAX`@qtvnf zNOybuEwmx^m$lmjMIL1wr=`ojty`OS{Q@EVHQEpsYHrXp84rnMvR}X^WAbZ)wp;m* zL(J{uzGy?N)PjEEla9ovjoIb_E$VO!qw&uKx;8b`oSfuqCC@Aj^AzcGAYhZH(Kokl z*=&CKwNaA3JlW7ZKZE+Y#Ez~hXwz(x2YzA0A%*NFgABFF0n?uR=*CoTa&qGkZGRhW zd+f1&wu^V=j=K?}bPgi^z7NvgR|&dk14i2y$B*0>Xp1ybUjBX0DUQyzcg!Mt)1n9U zA5z}Vo;V_F)31xd6@228&-lUDE=ZlFxvixG%T*Vffgeb%l5^My$!@Yu5MNMd+cwmPMH z_p_Joq+3-0NTk5vrmyol*yPu}1$RIjm#?|H%^-vf!dRel4gsKA<}o2tYH%l?2)UVk zmk|isvu=)L3;i$$>4;p>aLm=Y6bSd0eO;d#TAG~9Inb?N7YGpKA0_xnTugBjbNOJq zni?j-E9cTc&Aq-M+>YNeNE@B@$c%9ajaPCjIMuL|i&G_A@TMA*_E2m4TWI6&ZjaRy zcbGEgY=+X^&~{{Bw7nui+gt7nw8`iqw6TlvdrlqwJJ7b1^B-9ujW(^aZ=0a)>L)(= zsjvNDP|)_==kqDBg9nH39w&l(WMNgh7%mN2Uus*{t}3dnu`C^2I*o@t{X(z zl8!((W_4p|C}%%<1CzZ?lf#`rk4ZEme))Ggyvuq# zln>k`6Tt*<#RfSfMBtI@9HZ^xU@srZL7vS|?2ERwnrjyT2V-oGGTWpjTw$~&qR#Yd zH#ao2VkdJ7lmZ4!ntwreqieLjJ4k%F<)$04IFOJFNo8_Dwk^8wF0?Ih9(V-knR>pA zLn9xxm5q;1Hq8)gZF571XxqiMIHL`oda4(+``={ao#3~A{5|h}VJ{peA4Bzohq6Q4 zl{0ekN-Tcm-JiP3#SR>80;kAL?`^;T*yrAUc^ASY`QYaQcj5G?Xl=3B(9-NjoW%C7tE~p_rDsTO*z^-AY;p=H2!lo97z?-t)5zG9% z|L5hNp^dkZzUM8sqYWaoz3^%0A0cQvb>e=|+PJTx7F~YVhu-v#51+lIp&g>_Z=x;Z zG~94m5i&ON!8B3#T_mHR;Jcd$oW(-Plp@&^C1?ZSJB={M04aya@iyI{Dj?cH8$r&k zdCEAZFzaq{F%qz>XJ;!H2p4&-{gOc^f)ik?94sM1#I%e8fndSWy*kpk`3n3$>hRb{n^=R;&gd9NL^ezOr>Hr zhl(}LF+p3I5zByQm6pk#({|1%pv5A$1vlmY;Pm+a z6xw<~hyn$@^QmV9Y`f5QTF`d-5qyIDTiE@-Z#iqkW#VkTIRtfYbB3$CXt>cCegqmLSx^595l0t4uXt3z({KFU_ zOsP>$uqaZ)|h3tq?N=NX#W!H^{yq!ZP=t9A_l08{{anV%<7X1{bZH zeNvPUUK9!`fuJ^v*Ove=qZoIw)HR-fyJ)Cw!`h>Sy4+o5JQ*|^VsGXgdX8D~!<@$* z=-0ja)2(RREyXSp01*Kb3@1u9{S7om^g82tYC7+R(}sY$TA+u8AXrd9B$JCkC0iDM z!r8p#(HSbtW~aGnr)~8-_P}?#kFVFE5_v+lj%9F1FwR~Frm~mlxYx(%` z>2=ror9MJ}wi^bGv9;-HX^tFP3V5}GiIKrb69R&~J6r0kuWoI2It!w}tZi-}(m;tx z#YG4j;)!d#NbfU_!J58aZ*k$()y^@6WT500H_w^nysJkHdYBJ-`CI+5BtP;eEU&CI z^6vV|!g8Nuh|^-Ji^GG;$%Xk=#PW>c4y{xwiw=26B{ytJeb)99kaMg4^f3elE49)$ zhya?c1-@;*kk$Ela1795|HBN>XbMeL#ND4*B|aGC|g3G1N`jgGkL#@Uq!yGKtRyvwfWZ4B7g zf8|Y&dGxD4{`%Xvc0b_lenp!Ck8Lo&oY!u+NZ=4ui{X|iBCajEMO*Y;*X@vr#i>8I zp0&0Zy6NqK6sT4)U2&qR_3(ODOTjQZ|#%VED~Xsv8#)7y3KEGsd*K`9k0rpvmRpDl;nwqmTVq;dIAA~k!yEO6_87P;-eA)H=Mbl@%;frqm_Vy~fn%)V8muYa6^s!mV&q{Ee5==>?^LB$&FQQnrQ)X|Yt_6h*P% z&Q2p`py}$3n_xRc+r2{DsRy3XLmNbBllGp*0V)}7&$!B5J8*JHRA32&_L(<7=8=zm z(VO3Ob~oD&9&Gn7+DI91rj+&5ZnjPGPRm}X8)EDgwa-|~+G1eWCC)C6WvyQ<3f%Ne z9H5}LYl1E{#&IKyq0NRxcLsK9##~ULj3@RSEY;K5zy@x4L>VWV#lj^9SJCDR)8vs^ zDCapkP%0L=hKZZV_I5a%53C!8>2(KU$>p@~GK*?04+)7dmrYlq$l-}=32`FX-k#O2 z4Rm%k+;jj*c>{%f;D(iIH%!s2?d7MpxO^h^ok09$!|k-r&O6CrZdSr0T^pU|CTFfW z0MTM*Vr)D7Ml318F$e1ItPX06gdRwp-TG^7G^2pDl-~ZvXpCr6V&{ggE{!mFWrehs z4zr=owk}CTqZGF?EOB;Ixp2E536wZ0_nAVvq9T12fmj;8zX6C&Q=;r1qU|1{jVn9# z_4n6nSzZn%RDgY=FRLLKZbmI(v(br# zMLt`BlypidqV=$qkgWnS*1)1*tb@hR(eEfwL#?3$(FOeEHN@U;46VKl|B_ebZ;( z-b=q89u*=01--WSEVivQk`kJM zGSGdV5@AGiEY3|J$=DrIM(8$5z52;>qQS=!QaGwm{vqGYUU5SIQF0t|cx>#t7oA%b zm%ro@kdjuQD=2+OQql(hTw8Az-1G(>qV1lcEjm>0^40eY#sC$g4Pok`Pmx!K4>o

2tq5va?D4{$Se<+K%i++h81F@F@p( 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 diff --git a/pom.xml b/pom.xml index 66331d1b..00bae497 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.alibaba easyexcel - 3.0.1 + 3.0.2 jar easyexcel diff --git a/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java b/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java index bf76404f..ba8fee47 100644 --- a/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java +++ b/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java @@ -111,6 +111,8 @@ public class DataFormatter { */ private static final Pattern alternateGrouping = Pattern.compile("([#0]([^.#0])[#0]{3})"); + private static final Pattern E_NOTATION_PATTERN = Pattern.compile("E(\\d)"); + /** * Cells formatted with a date or time format and which contain invalid date or time values show 255 pound signs * ("#"). @@ -644,8 +646,7 @@ public class DataFormatter { */ private String getFormattedNumberString(BigDecimal data, Short dataFormat, String dataFormatString) { Format numberFormat = getFormat(data.doubleValue(), dataFormat, dataFormatString); - String formatted = numberFormat.format(data); - return formatted.replaceFirst("E(\\d)", "E+$1"); // to match Excel's E-notation + return E_NOTATION_PATTERN.matcher(numberFormat.format(data)).replaceFirst("E+$1"); } /** diff --git a/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java b/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java index c34990fc..a438a2ee 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java @@ -32,6 +32,7 @@ public class LargeDataTest { private static File template07; private static File fileCsv; private static File fileWrite07; + private static File fileWriteTemp07; private static File fileWritePoi07; private int i = 0; @@ -40,14 +41,14 @@ public class LargeDataTest { public static void init() { fileFill07 = TestFileUtil.createNewFile("largefill07.xlsx"); fileWrite07 = TestFileUtil.createNewFile("large" + File.separator + "fileWrite07.xlsx"); + fileWriteTemp07 = TestFileUtil.createNewFile("large" + File.separator + "fileWriteTemp07.xlsx"); fileWritePoi07 = TestFileUtil.createNewFile("large" + File.separator + "fileWritePoi07.xlsx"); template07 = TestFileUtil.readFile("large" + File.separator + "fill.xlsx"); fileCsv = TestFileUtil.createNewFile("largefileCsv.csv"); } @Test - public void t01Read() throws Exception{ - Thread.sleep(10*1000L); + public void t01Read() throws Exception { long start = System.currentTimeMillis(); EasyExcel.read(TestFileUtil.getPath() + "large" + File.separator + "large07.xlsx", LargeData.class, new LargeDataListener()).headRowNumber(2).sheet().doRead(); @@ -86,9 +87,16 @@ public class LargeDataTest { @Test public void t04Write() throws Exception { - long start = System.currentTimeMillis(); - ExcelWriter excelWriter = EasyExcel.write(fileWrite07, LargeData.class).build(); + ExcelWriter excelWriter = EasyExcel.write(fileWriteTemp07, LargeData.class).build(); WriteSheet writeSheet = EasyExcel.writerSheet().build(); + for (int j = 0; j < 2; j++) { + excelWriter.write(data(), writeSheet); + } + excelWriter.finish(); + + long start = System.currentTimeMillis(); + excelWriter = EasyExcel.write(fileWrite07, LargeData.class).build(); + writeSheet = EasyExcel.writerSheet().build(); for (int j = 0; j < 100; j++) { excelWriter.write(data(), writeSheet); LOGGER.info("{} write success.", j); @@ -116,7 +124,8 @@ public class LargeDataTest { } long costPoi = System.currentTimeMillis() - start; LOGGER.info("poi write cost:{}", System.currentTimeMillis() - start); - Assert.assertTrue(costPoi * 3 > cost); + LOGGER.info("{} vs {}", cost, costPoi); + Assert.assertTrue(costPoi * 2 > cost); } private List data() { diff --git a/update.md b/update.md index 6cc837de..5d1f724c 100644 --- a/update.md +++ b/update.md @@ -1,5 +1,5 @@ # 3.0.2 -* 修复写入的性能问题 +* 大幅提升读写性能 # 3.0.1 * 升级到正式版