From 7a5bc4227bbcb72a7e09adb6e7b6e829b52bdff8 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Tue, 2 Nov 2021 13:17:53 +0000 Subject: [PATCH] Do not fail on different count of categories and points and fix cloning charts We see many cases where documents have charts with a difference here, so downgrade the exception to a warning for now Also handle cloning charts in workbooks where the parts have unexpected names by making sure that the chosen part-name is not yet taken. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894676 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xddf/usermodel/chart/XDDFChartData.java | 6 +++++- .../apache/poi/xssf/usermodel/XSSFDrawing.java | 15 ++++++++++++++- test-data/spreadsheet/clone_sheet.xlsx | Bin 0 -> 12465 bytes 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 test-data/spreadsheet/clone_sheet.xlsx diff --git a/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java b/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java index 3074f4f486..91ce35e964 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java @@ -23,6 +23,8 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.apache.poi.ss.util.CellReference; import org.apache.poi.util.Beta; import org.apache.poi.util.Internal; @@ -45,6 +47,8 @@ import org.openxmlformats.schemas.drawingml.x2006.chart.CTUnsignedInt; */ @Beta public abstract class XDDFChartData { + private static final Logger LOGGER = LogManager.getLogger(XDDFChartData.class); + protected XDDFChart parent; protected List series; private XDDFCategoryAxis categoryAxis; @@ -166,7 +170,7 @@ public abstract class XDDFChartData { if (categoryData != null && values != null) { int numOfPoints = category.getPointCount(); if (numOfPoints != values.getPointCount()) { - throw new IllegalStateException("Category and values must have the same point count, but had " + + LOGGER.warn("Category and values must have the same point count, but had " + numOfPoints + " categories and " + values.getPointCount() + " values."); } } diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java index b19f8e4611..ee953ba50c 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java @@ -33,6 +33,7 @@ import org.apache.logging.log4j.Logger; import org.apache.poi.ooxml.POIXMLDocumentPart; import org.apache.poi.ooxml.POIXMLException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackagePartName; import org.apache.poi.openxml4j.opc.PackageRelationship; @@ -243,9 +244,21 @@ public final class XSSFDrawing extends POIXMLDocumentPart implements Drawingm2bufsWOC=u zTkHM4#aeWqUcJ9QRcG(2`l?Dv4iX9z3>Fp^tlrgH6zms4czUnzWNPEg!u+@!7}d@^0y_igIvgCTbsE1s*bcMz;jX(3FkjNkbfw-|5*-Rv?l zLn>0zzD$Q9D&`K?J3kxw`jDW*T62tITtk);#rR{{Y@f{qX@VU%h=6tRjdG8c-m6W6 zLc*3XlNA&1U|WDbSMUv_{x*av$DXZ^(VFYAi$ok|C?d(pT6N?!}5o1-0hvLjqL5MnLTW6 ze%h%cv0I^+6*2V0J95Y!*hm1IThvBc02uUmOY53$WsAN9-q@s%3j4~kjOR6eW{Isw@1e8;g5vO%=`@HVn}WMx(Dmyd5D!4O=J;-I5j| zr@3H`T>AV>iLq5_qDXqju~M?<1F2;h_+?trA_u(13?`}D;M>QkE8ArPpQ|sv;y5f? z(lLYJymVFvtn@d>bp?>$K)#;xw~C71jp1jp>+VVGA7t5J>e|^}^TO1%vW+?+e|adQ zs|D70MkkRAA&t1)LDrRQFG-asJ{!u3PK$Bl$qYh}|70lKKMeJ3B4-OzQx|8JpD*ms zwu)AhS6yaB?YP#oaIw!&l71V}%UVE}nHy}GGkQ^^b*L3o;YyW;>gTHo+QQw-<&B$T zzP(&se$ApMJC@b`Duj9`zdMed6;IZbi_X7U-$!s~)YGtF(t>n{&*9GK%Cc4Bb{igS zqU5b39ZP%lcw(O^bW#se4TM-cp)DQ1z!A0MduTFamD0rg4Tp>*QM^?(o~B1t$n!U* ztb-NI-8V(y&`kW%C-CaLg6RXu?#Vl{-Zer>(~B*W$g~;}NEKZ|YHY_RXEB7g4lmQG zZNJ&jW4XeXup)SVWRW5x%={=n>bpB{ig<_#Gf#b|A4tqq^A`I%18kV+7kX=yRC>UHD(%6xC5Q~_&7}^) zZD1p;VD!H6-)6c!d|u*5$5Na3o-LW6o7;Ky4LEN=x6qeI>1!x|t|0Z=r$-T8A{76& zDu%vRrB45<9W=A#{oWUmaxC)>)h)lIHYR}xnYuDuH$5&E`=~|or1o=X zWJ&L79+qMl%}Q7up^VHUBGroRJeIC?yZ`|IyB6&lfMz88mVvQ%qm5JQ{paIDR4Cr_{mI9?dht)k zhvGku&mS)5=OJSIx5J5!9f9v*MU}YrlSu85ITRHKx>1NWsR)r$&TuU9OK%>Yj7iq6 z_w0;zIET)-pztLU44AZUDb2vczS@892<-LbsdAreDE|^%H&mEFje$Yq! zX1tJ-TLwfxgD}&(*=y2aBeaDqT!l@JIzW!QEaPC$P%;C<@c7*i6_WWu-bevR#)B_L z1IaOZ9h4-~n6VybBP8h_r`Scev`czcqTKZ&&AtlBQ&&4Gw?`u;dzL}I*fuF588*Fg zN4m`mel0&n`n?nUR;qhh2};10?+Y8pK`X^m7LV=7+}(PLZW|hz+En}0L$eDPruA!u zhBb`LpZX{)amOt%#C0p9PU-IBafhw21j4qqzq?}C)xDI)9}p>;UaQVu(Q9j^J+6_4 zDW@Ipx!}?+tJf51N11B@oT3YcF4?zj`dm?Imq3QiF$D5f|(BUF|y~{_wan3HzM)E%(Ij?nM*6Qe4TT=$g;kDJXYUI`v<;N5Qmp`x%YUl zx?A(EL8rnhO<8cYW6cTSXmys0GucWeTMm^meSs6TqEuZDcsX)xNpY#E(T0T%Pc zFa=Wp)*O5m#xMklTWl)HYXH!V-Vg-E6b;TU*K=sWqZ5SlktHfc^|DGfl?{_;QUXwUxVAhM_WsA$oL-%D%652gVvaN+H--<45#G z6{oF{6BVbqcv@sROy&aU7NefAP&((0QV?UF3lz0E{oa&Hb?=Db)Q)ilr7Bfy#g=4PReSyNVy7x0lKp9@a{m;!*s0_lo^ThOt=V38krM z-+ZI%u&fjuoytiuIhbZU<=JS#rZE38mLIy0OvlKYvB;#!FkjsqUG}ivkxcUE6s6C1 z2)tQLn#O~5wGt&FpOp|-h6sO!lvjk@;l9Zl*b1IU_inZiLs|kU?tr5J{!(@MN09Q> z0GUIfaH|8}T;wfLAO_3>v|Q-v`Pp0a zt_3`1WN4fR-tVr~et=C)d@ds%Ni5Q@T(Ai03(P8C(Q}H9#a86CO)&aPz#~^ejTE{0 z{Do`fF!@AbX3c3KB3FQ$?USov-05wvIW8}BF~O&p(UF|f`EVlK;56YD7`0v|@$d>G zkscxA*u78monI=_q&PyGE&{*zkHQE0WDRb+wa$JPt|rBuGgZv!WZQ?w`L=EWKZy#$ zc?+%QLqHy0B$#2f$l`o71*~^eP2YplJ96R0L-Gngb1*{`w5xDM49VyxZKw?%-r@@{ z5-_*Z(<}(k^!P>BD8lN#7`-1X0S~@^VJOq-kCDB1;o>8i29iGQgOKQ|Su?^NFj-%s z$qE5#3zwRgK;+!x@3l{otl1v3PX-Q{V1iHj;aJERgJOkmiv!HyAfumdn1uQ65g{i; z83Rxuy0hJ=@sIqyzx0Wx^faNb?^hYD00AzO{M(I=Yb~HV+VTP-BZ> z$DRQG`8$yi^L=}3`xr;keln$SJ!`A`) zRep&_l;O6XKA$Eb=#(cX8cWojCf%ccs{pq)M}|KsAGkPp+3}=LZz*>Ks*7rX9kGgY zM_u45k3-Mq*|H<5GbY&=4ePtBnt7VJ9af*M^;bvnGQ&yv@N`W&TTS^Sy0ulJuC&}! zwq$58?KtzlPsvQRN6r$Boed{E*-av!SMbd|8U7Fx@fcBX2B+A9=(F8);hoBl{mmPU z#J8~F8xe?>*n!!nh!P_l93gh!EXD^6J_zoT?g_lqgQUa?Tz!dFSpCj8r>>Ni|Dc#X zf$SiiJ2EF^m()cA0jSbzTX^Dni{x3dV@e5G$|ge1yAI<`Mdk-1DNKhH%tc@?~)Q z8RRv}D>7?X%qmQhW> z5G*9kPk^N`en5pgDjzDcX{5soo{W#CRHPZrY-A4JQ9g9E4@LXK|_M ztrnO=jV8>r>_?@6-vJW+!(bILQ4u~Y; z(1%hav_I@bU5<+c?-RyqJ|;~r)rm5wdWc2yF?=sTJiJnA5uV;p=BT7$$}B~4`KzC% zjS68!FXgLlIzDt{9sKtk4*l_Fc-q+p+kCzWjRB8h$Xhbd4zJy+8LL$KDp~w z^P-!@o?Qc4?T-wqw#`KPFRBTp$Ids6%vb1N)@;c5d#fJnyXj>>532cIu{(!$rC`YyT^G>zB#RJd$^yfI=KA*AIbO2|B?3pk@o+Q_Wvho$NYn|8(SDUJ=ME@zHmGr zofR#B^D-@_@0xz@+(m;ZiQ88XBX|De`k8SvpyjmhAUenrwd8HPlmC67uzt*Yb&z~< z+qbB=b%*9_Ctgzh4m$QtLR6g8sX_ve4~L}qbx<=a)Avr-$Csa7gM&E&f|cuCVx^ny zH97(P?>tai+Q$r|2>V6)A(&S>lAcNpXeY`qLI$10)pb95yeRbA;fr&)N!c8Sh4p=e zFhNyaxQfl5>U^0;y>1Mv1>D5#Fm;S4qenuJf|A7os~v1{(EP{?u|Li$401v9z2BLK zF8^eFPg+Yk)D=?^r=HJvnYrcB*&6tcNiK$)a8HVSyOJMWtz&!cDD;qAWPcYP5=igd zwlS_T76O0gt}g!JL<853)#);TT7vNmoHs#?eimU9pA=~nwanWVnRPxOW`ozzX$+0u zG0-5At09GNJd$w1kyWM(0|P#wnb|=FsIjKTo<+J^&Sr>~;4fL~C#%UB-$>ICO;AEz z0g|)R5-H4uMU-GB;*2qywGSii&UIo)QJ+E&aFd=~G%#kw?H=ZPEq&SJzKm2$J*c{N z-BgtpkBm5*xh3)9dxslQeJnjo4!^6@*a^a!z|H;KvgTAB5z$c&r?BIGAodb3UlD>U zLeKy{v~>j=f=MrWy;m&lW}I40<5fU^-8uEGZ@R9q0eCz&QD87O`i&kBfw%;x)d93v zYD9lA>r4&#!n=~HX6oet3GiSb|Q(T+$2{=pdz66lmY3Xl2iZ=k}9-o zS8oJ&8d4rGb%NhNwLHRe9Xb|KJIwb=T0F=y5jIg|wEw#e#7Y6QZ60L$kDRGORZn>0 zAyrmNMZCbgb!mI#3B6_-LLs$+9$NX{y+=9~k_KttJ1TLjB-ye2EBsu|2V5V`wmh_( z;)6w6idG=kKzLPq^u`JN3hqPJUNl|~jX%!OCB=IO%p+A!N5aESZ0UT2ju4~~l!(&s z9t%OCN<mWUP{ot1R|D~c^?jgK*jjdi)2GDB)O3#@Q2Zv%blR!OV{!h zWYblQiMg6~!=C0QPPCzQ&4CjKAOA{GJDnueMx>b;uCfoHuk!^5kBbSRv3V-1Y`0WB zX{d)FA@)Z6h=#93-NVTh!{aXml0T2zkZIdLV0~2u!mGV2wr^X|MbC}3f4waIIBxU0 z$huA_Kw-Qjrg(V9>pXibvrmTihepZC-q!g{n9KC8z+i-)%Vx-ztqoF^>;|HEp6o`J zb@N0!madiCJV`$B#H-SX7ydwNKi6pd4@4>i-)OM2X?fk|x%cjT&nCh~>syI=O#+V} zg~~g@pQG!8?HJz5Q#o7`{hy-i-?)dLnjGGXBiFno{xqVa&Lm)n2>`L)6AU^bHUqLN1Pt82Je|Zmn ze1T(WjV;HH4F|<2R{2s%t(dQf8BX?u0nq|@u^*#t-Gcq{G<%220npaN8jUt3fI0Mu zG!PdvsgyYv94MO=O(why{fZhVHIho~w96+0t^VbME$#|dTEtsDzvMkqhrU@VIoXxN z1GA6leO^qjNZ-_WCzZ8v=zxle9>3oI_;Q~f52C9CXP`|f2gz6L#lXsMSpr41oS6H| zva%@hBn34EvGQ8$5pyz8I9|-=?qHe^yM{Vmc5xkIab30MpK;V*in zpInutAl1MDjl_ELWQ`=AaQew=Z559XV#zCAHaj2Q=3YN61t2ciEwHqydD)s z>W6gpW-uEu42#-3e_ z(>1VL7^no3g@LH*Nxl9sgeU((S$>ozhHrGP@3V6|hAOZ|Q9*o`fIET}zb|;O4$dVJ zyFLQ>U=}7Cm(VKkS`?$b4(M>s1Ux+vS_5F2)v+Q5o|MCL%VOF2eW3SHSQL11K37og zBjh!xU3(g4I%rbqF6^bj6F728opz7#oj`z>g&Id^a!7XX4d#xd(OudWfTQcSC$+xS zSts`B7?zqT_e2|?LA^H1vO7-`WQVpOtD%SH4%6w*P_$iudDtP(2NVGY|^=6}*V2^QCsH!DO&OoNj1L zW3}&G7$~Z|3lv@TC6RB#@7zk=D^*AU{Wl71wF8Z{U=5>kHNJnLsR!@yA&s>ZevJ7c!_AV(5`)9FAbR}W?CVc$)c6&L zI_@rfqGxyUXR%NxeD+j(KC;;?ebWa#%HaXW{%BMF&kh0`l>Kh)$w5q`{*#0FSMA%x z$&fJ;hUvGZazIW6C_UWuoIYhOvpZ@o7$2XWIWfGZJpi9Gh@MJb{I2)HE>Wj4# zbW#NR_##FXk{@oqLgQzy<7DY!Rizyr5W0Ao38&1YS<}$0cm* zWrx#2+hn((eJ5#THw5Bw>-6xXr16G`6J6~x$wj^y`sjupVG2TG!`)p{W3RJB-3DBCW$#B5X2qUzi6ItPY~Q@z|)Q3(*{x)SC~UP)rg`^{4d6dKo$<;wQf z$q#sD1liexG+vJwBdwzCAAG$A(gdnpN7ES0T9N3s?h=fXO-Jx#H#?EUPU!Me!g~=k zqW6YPxSd{mSPwch_M8l_uU)p(v)v5cTrO-CRNs=xp zk1Zw)VY`X(&YiksJggWGQe6h*$@``+N8vp&1VH@q*Q37dId52HR-7DM)4?tEu>B3w zt5neyC0A)?4R@dtgB-{pLJrv+axP}lf|#O(4GxLFKk~cPNvYKIr;KnvpB)_Xul}H? z%sS&A`$qo?uFg-nx2cJ$i_`M~dd|Il{*q(G2l-RcvXwF>erJvp>4u(EChD@@| zpsTmEecAg%MKD;=tRLEtel_9b5glS`P!7>3Kvd9>#eG=;zKe`E)|h32rML}-E}ZEV z0lFy5TEOx%Uua35{9_kauT@pH=u0&o8_1E zAE7Jq;ocf6-B$6HSP01G4-<@;ecOVPfYKs;!$POPz@_7hAf!@@Xap6kQvgyBX!SJc ze7kNGZv`2hi1x)Rk)-cjNI9{evx}35d!UH0bve|}kE4zI!`y>`A<`Q$C-yq)p@)=` zAAob{XNyVwAVfQTvKYZXjxwP9!B&19Vu)55v3qLFw_h_rty&A%;Kms8(xO9+ky%bP z4|_^fG0tPs#WA!EFSyg`M%)TdCf3KMt)%T7d^5LB5crXk$s{2-EFP%ws_>{0bB&vu z1cw|BN+ZA#Tkb4M*eufw$IuI1Sd4|-9oZuvgudLhqTF*> zdXDf}VEqut^HX5s=1|SWWADa+j$FGN$bM=%zAqnq^GGbejdZ?Throv)UN-0OICrO^ zx=T8~N`K+uAQ67M>cp%p8(kD@L(BB{GKTZxWI%Jtx7VKmn zLCrPoiPC++V<)LsAC2}}J}r^(Q;uq(sVvzLn<##Vr~Al38D^Wc_MolgRbcZ8ly^p6Fex)tz_UdSKkD)l`r<+7K7i*{ccs@UneYjxp z)oa`nCaU2CuJv11K@y%WW5&L_Y6a#@#Xk<0dHNSDU>Eacl1;yN@vVB_BRoIutOfZ; z(9_{~{S;vS`{WAJACKGF#nZ<0=gBzI0mOddd1j@CJHF|{q+%MvoKPSgOLg@lH661c>4y6iZfejRvdx3npPlWij%d@q-x`N@YxYGZC4_K#?P`I= zhY!%nV9%$7oi3z7!z0TevQb$WW-1wW=s&zzpB{zp12yyvXBj83jF>WARv6DdvV%>s%DhfJ~<+FkBkW6azJ@}p* zp6@>>BG7(~)rz{HPVUH9#_D$ZkYBLVQkNuB(~THVjmlE7&Wm0uDB3k;+>Jt7Tsw3U zA($I1TV{cxO$MTeiCsynKQc((R5hiCQGShQFzjX+lB?=h(Bh$CESay81nhpd zk5Q_)f5)G+_TIUCoR=?$INcj#*`H$IByCT_&#P~WNn%u@i0Iz5iWD-r2gU(3 zFV11uDz4B>KN4&hWDk%F_l8+sgm1bn)yDGK7M5*vsJPnVSgRxXlxpSM)ox=E^r;yQ z1f^P2FOr&}vWMgKAsRhYM>}nPpySNvE;RdAG#j;+fZvI2>~6m{H|Db|xH_{opik3e z{nY57vES)-)ST$t$oin!aHiCt3mhZ*=q9&BEw*Gwx9mc@%w&4*2Lvt6efi{RGQVs= zz_3WHGODVwLr4UlYfxw-5Bojb+t4?zTHZkyc3F5!uL#Z}xf^K8!8z@rIr+9T(;uIH zLYmVv;Gheae5%y2mHp)kU~qPZlN}__Qs*nqh@Lr%TDkyz1YNm`7m;t%LJ=8sKqJ=} z@L)U5J1saZC>2=hpuHbg%kbzD9)%wIi6>Y5GJII-)8)`;YV6i%RCu3D_=$H``Ix!c zMZBB9wBW>J*4XyeyI4WhHFv-SyE+G~i}Wq+BjFkUAX{x(y$p(P#uaq`WdoPKt#jC$ zV@ThO5hA0Hv!5eGa-<3XvGw*kE@?kLJXob~(!Q?ln&pF^Ap;d(2v#xt&?Jx=;2twz z-@K(3zsma{C7@XCwezw1;m7MDc3b_ns*Dvcl7%@22LJ}Sc|P9MV7yIHIjPVN(67;N z`Lfln=@Gs5?!~je2?LHAb3%cEX_Ebuzj?}Z!A$Ipm7MGyoLLMV9G-)5W^Aq1(;OkR zw||I|{o!U0RDL2H
    ^^L|LZIYI#-cO~_FO^OV)*o_wv@nor21=K3KCC+nDJeGrH zkdu1Ke-OLh>^C3TZ+wx4D(MS357PuHmc#;58q6UK<$nmD?O-EhR^qpB9k4UA>X#dI ztYD0hM+a$L*#>e2PPSQ_ycFQv;SV5I9d{3==R3Bb#B$!jr`107W%Wn7|~a` zN?vG|`*v@|T(lX+16#Pb%I_?dEhKJhKU0y3>f-h%y*U3d6+!z|b7Ola)1T$@1b|{M zDQ4)&Jr>e6(Kwo@Kbd)iWrNnlmWolQrtTv`!Mcy{^u+nKiOI;`@D zv}kkzq(D^60Bl<-S3u6C74cfmkY^RcYCS%@3s{)hjyf|UMrDZkGJcI-;5)B)x7Vo< zwjJDv#x#vN&2nC%*S+%ASl7Om);7&I>zwOJan==G=aJqqForgPX!0Lrp$fm(kI|Mu zg}%VFIAN8ieK31}0RxHSo)Ic!fuhm!?vw{^dv#dY6_DbxG<5l$&QF)0X;3k`kl61% znA(>_ARNMHF|11nH$*pJyV*5LIWN7cXkDra8x;ePO;j659o)WqlVapRyim!sFfy1D z02{p_ihq2U*V!5!d~nRl=6_3;4)l6NeyTjIWQFnZ4uE01IeAD^;Y}dzXk`keeES*W zTt!Sb`JSxq^^YkH#*^iB#q8}|Ozm9s)jS(iBfWjxT4^Wj{wkfR|_a9=dd2Iz(=G8$j4huA(@l3@M-frqh zH!u#J-wAe*%?y)fpCC3vS-)qH-tTBBoIOLg`ts6Ncq1{Sk@GzD6BTDv^&ppm;Kn!)ffr2&7h9SyqV@x*pg)X0ch#I1>*#d2ayFQY6A0_wS;5(&h$~ z`v?)knCPLyXLG2uSolCKjgurF)*5pjWC*u89x7-~o{ve6oDZYT)5BW+Nm{@mFv0$u zGX8bU_Ib+qukr_R`AJrk$w*Rj**DcnB=@9C%h`%LcdIKR%{JrnLfMf7QJJ>mTA z$m;JXzYeoKv#&oT0Qz^7zn$Fs9q`u%-Cu9Z>uFH%Z*J>nRp57&|E}EilUMp1l%K7= z-%)-oXFl_)KZOhHC(3_xIDSX?wchbp1a-XsK=@e%{T<;~;`>*7xDowC_&3@8mFE7A z@+)`z>tm`W`76qQq0GMn{z|R>su+m$C*Xe&(BBb$&DNhO*q^dZ_7mY(LiYROUqkP6 zLjR}CJgN8eeE&@Ee_x98OYC}%&3}p*?SDq<-&g