From ecb76070a9001d2ffd4a818a12e36d844bee4e80 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Fri, 17 Apr 2009 18:02:01 +0000 Subject: [PATCH] Fixed XSSFCell to preserve cell style when cell value is set to blank, also avoid NPE in XSSFCell.setCellType() when workbook does not have SST, see bugs 47026 and 47028 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@766103 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/changes.xml | 2 ++ src/documentation/content/xdocs/status.xml | 2 ++ .../apache/poi/xssf/usermodel/XSSFCell.java | 1 + .../poi/xssf/usermodel/XSSFWorkbook.java | 10 ++++---- .../poi/xssf/usermodel/TestXSSFCell.java | 24 +++++++++++++++++- .../org/apache/poi/hssf/data/47026.xlsm | Bin 0 -> 8203 bytes .../apache/poi/ss/usermodel/BaseTestCell.java | 19 +++++++++++--- 7 files changed, 49 insertions(+), 9 deletions(-) create mode 100755 src/testcases/org/apache/poi/hssf/data/47026.xlsm diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 4a1d8116c..f58747e7e 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -37,6 +37,8 @@ + 47028 - Fixed XSSFCell to preserve cell style when cell value is set to blank + 47026 - Avoid NPE in XSSFCell.setCellType() when workbook does not have SST 46987 - Allow RecordFactory to handle non-zero padding at the end of the workbook stream 47034 - Fix reading the name of a NameRecord when the name is very long 47001 - Fixed WriteAccessRecord and LinkTable to handle unusual format written by Google Docs diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 7564d7d25..4ef245ad8 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,8 @@ + 47028 - Fixed XSSFCell to preserve cell style when cell value is set to blank + 47026 - Avoid NPE in XSSFCell.setCellType() when workbook does not have SST 46987 - Allow RecordFactory to handle non-zero padding at the end of the workbook stream 47034 - Fix reading the name of a NameRecord when the name is very long 47001 - Fixed WriteAccessRecord and LinkTable to handle unusual format written by Google Docs diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java index f0ad410ad..2a0e1ff4b 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java @@ -627,6 +627,7 @@ public final class XSSFCell implements Cell { private void setBlank(){ CTCell blank = CTCell.Factory.newInstance(); blank.setR(cell.getR()); + blank.setS(cell.getS()); cell.set(blank); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java index 9cb66c531..1648ac86f 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java @@ -179,6 +179,11 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable(shIdMap.size()); for (CTSheet ctSheet : this.workbook.getSheets().getSheetArray()) { @@ -192,11 +197,6 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable(); if(workbook.isSetDefinedNames()) { diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java index b851d8827..f97a6d1b8 100755 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java @@ -17,7 +17,7 @@ package org.apache.poi.xssf.usermodel; -import org.apache.poi.ss.usermodel.BaseTestCell; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.XSSFITestDataProvider; /** @@ -28,4 +28,26 @@ public final class TestXSSFCell extends BaseTestCell { public TestXSSFCell() { super(XSSFITestDataProvider.getInstance()); } + + /** + * Bug 47026: trouble changing cell type when workbook doesn't contain + * Shared String Table + */ + public void test47026_1() throws Exception { + Workbook source = _testDataProvider.openSampleWorkbook("47026.xlsm"); + Sheet sheet = source.getSheetAt(0); + Row row = sheet.getRow(0); + Cell cell = row.getCell(0); + cell.setCellType(Cell.CELL_TYPE_STRING); + cell.setCellValue("456"); + } + + public void test47026_2() throws Exception { + Workbook source = _testDataProvider.openSampleWorkbook("47026.xlsm"); + Sheet sheet = source.getSheetAt(0); + Row row = sheet.getRow(0); + Cell cell = row.getCell(0); + cell.setCellFormula(null); + cell.setCellValue("456"); + } } \ No newline at end of file diff --git a/src/testcases/org/apache/poi/hssf/data/47026.xlsm b/src/testcases/org/apache/poi/hssf/data/47026.xlsm new file mode 100755 index 0000000000000000000000000000000000000000..77e4eb97f31cb0fb89fff05029eeeab14aacf0f2 GIT binary patch literal 8203 zcmeHMcTiK?_D-nMizqd82wgfzM^GX3-UJODrPm-u>7hxHUZvM49i#^k1O!1kkt!fa zS3s)#g7>}gUaoKE{r!G-XU;j3$@y0H?Deg+zP+}l3MLi>00(dd001xnq9qFO{DA;K zAT|JS6)+1lQE+l}w{mp9uj}n>H=loNcF7YAo;Ys)P#=13b@zxfnbe@2Dj74OBlC^i+lkJJ+4KQYD4;z3XNl9V8&! z+qI*4XI3XL_7>u;LRv(o81|_ zV<`Lx_t91Y-e-5F+l!3AV=GX8=Y))LM)Wi+by#a(n%lsW8+xpsK);cx_KO>3yI2!mrHuI zuFRQV@5Uk{%ppNx{c2~l(N2TF3FJEcg<3a^NOD$Wbb(8=l0|7J=P6&N&PUzaX{$UM z?{74wh=mF)kpF!gu=~gJtDuRwwz*}dkfiF2#&110-5dN)RwXzQVg1+}PIl6Mx#7)6 zLF%n&9-W_K0yO^;jJ10FEc@tRRMD|U02l<`ceS#2yTNyHXUy&UCkX#%f-frmy?Q4< zVfVIDv%=EJ7e}QlIR#CsN=;0<^zE!$47JgDta9HEf-wUj7O3Ha&+lbTX17-CbQ$Q( zZ>V=Ra>!Q-nfpvUgdwu^NnV&U+t^X`&^)7q8qCbv--qQVq?=Ei6jwz?(ljQVvX~2l zG$;smH(U$i__g|=w!_b*E;EK7&B(QEQbjUgXi!S%r{l{uC=s;U=ObAsJi@iR|W zkCMx}D%tP3tYA%0@*Y*3cB@}G=-Ri85whMBW(&+L_UU^Xd*^lHF3c+7LrU}Cq~;>r za4|MzHqj(mtFP3U$|OVF^NOT431l!SCS;bYJYCe__=HISs? zR$cR%D$W`{TT`$ZVOuad!6>J1df7~YaRg`aII8HVB$gk2G6ph))rZ+UpeQIS*eAv& zRH{I1ZHsQ(TB&9$rDqwsy0FUiOtv|zLoC3Y-=rHy?R-})RRwFBlfQ77ELml}@;+P# zj)j0x6Br$>W|y(4A;Bb76cZn_ zEsX2$5;R8gTLQt>w*e+-QaGcN<;5Fl0{xjfQQH0J5F>47*(FKZ7Tzw^RpVlk+Y5~4 zShinOvly#nL9uPlReO$UV&STv(8SpEnDLNgvSvRhA1cl7Wi7ZgFr>!vuwi1q6?0jg6^GT0W3Dc@zQ$PiR>w*W8PxCmoy4eL zY=V;Y3??NpOxcZRA0SI(JvX-*vNyuaXR8~n(n{5l1NB)OZ?391E#FJZz8%0vBPtVWi=N5~XM(ne<|GcX9yN z(c*eUOjf2N)M&dL!|3f&lMHoo6|lvh;*2$IEpvK3E-QT)Zj>L-@D>aPV@#8xN49SIFi;hbJTL${U7x|vu z2{a!7IFa8=sZ?maNAsaMb`M)k7j?pqj3py@{3`3o`IjS|y)Q@4KZU)2#_+@abai;Q zlYy7lW`XZn&|*jOod3b+35Gn`EdOs`cPW=)MqTH}o#3|9Q}3Ikg0@Vo!u zU&)-EHTAIVI0W3ieHeR3G1p}23TWqwyHKbL8<@qV^;##Xjtw?(fG6Hs7CvYmanstW zf!HP5%Rp|I1Jf*f#>)~EY+h)K_n8*D1o$p)1LA`aIV*hQGK7go2Dz@7>vw@3_!@RM zMOyUKwisdP2@ybg4rXG-&9{W;xane3IPyOqCd86&ZfSj)^oThQRFTnIrN0eQRZ$bn zX934vkMy*|@=r}(BYf#;U+qQdAHf6f`8xV=f!3b44ra;5Ap!wu_j;p5!60hkM2^nY?GFh%!)8*jdpS3!asVx2eK0 zs(u!2d+PNjMXR`56leC@r@DF~6CESSMivLM%=sMI(G+B}D-&RNe-<`7Hsj?n;j_NJ zReDe6QLQP3VR1{NcZFZ&T6|uj+Sgz~QBAiyj*tAJypkJ7C;WSRre0Pfdel zgWQ8^9K4q@xm-l~E6?mbf)6a|Mwk>jfb{rVWKK zu9~*@sfp)48g~{&Mn%=mY~p0Regj)zHf2?iVlRoQneCS;r3PD7n)6{YdP02j-+LDs zBH9rJy{*9dYVne{FIxjmS6ak&wXY)yZmcy+$35fWV+ThLYoQ*AjMLD6b@_0>?pz+y z!vTDyGII#M-aZriDwya*=lPW7QAavLRX_~yp|cKjvo*g$2bY{_j5sNWh)5_g6c8x_ z<~}#ZeD_!je^TiQ5$CuVBh?QP&h}?7AN5+^^3`+qgesy2TMG*k-cyhTIr|3Rv1cdd zZ@3@EwJKCd?g&=BJ#@o4u@K=<_;E3V-ENPO(EA22$o1VqZ~ z3?djI)pgFc|3Tnde2&Vf7FIRxEYScB0r2oo;_$JVPBfEL_cCvlCvBM~v8v#u!nxqw zSGf=1bmXF=A{8ayJxM}HzZ9nBTeZ)tcW0kuSr2gxsi_OhWzfWLw}|5YSR3qN7vfkR zhmH(c9=yNJGo`orxLOM36B)4@emh<7eHBK^wYot4w1Zci9XIQZO)8Uw%^q2H1W+c6 zgd&@nAoCw^*JLZswHAaq%wUX3?0IG?St zqC`g4dwV;Xt+YHmTP{EBN+CR=xqcfD!%ro1*NTC>tc+;WZCVo@z-BhaDP|(|BHnb`ez~ki-jBx5SY)^O7V%6;G0|QpSm6{hTGQ%wAsXK2hVpnjMu+=yX-Sj#d7#y z_?nc8_F#LWp^*XQ>AsbZN52t#TCedoF82A;_T(>LZxOG4&jG@tNbhmLu3BUhkoDn6 zfXFwHT0Jke-SbB$nD^-2MR+|BDFth_t2G{{!LcXj4_*k=1rsHO5#N&vfZ2Mmp5;{f z%|rB)9_KNwASrwkm)D~R*uX1d1PX^_)x}=#hi*~lT zq#x@C42OxzEI8xVIWhB zyW1e4xfD2Wdt0nb3Tom|S5 z_LK?VT#6u7nm)sbxfNqtVw!F|uv(mVt21LlLABgXURuU#uH1FNV>~P+ldIn_xr;Hf zAzZ>zYoj;<2v^;^I}0C^QNvXEdM^iCsOOBOF_M3igu#h?)EBBZ%JgvSt;5ah26`{- z!b9$$_Pq=Ecj}21k(D{T?nun4l379hpzINTMNdZi}z= zPvi6`4S9mc>mtV&F|87E?7Lc;Ap?`g(7(!{&=T`)}G@epSIn=?r}65tgob~0khkhH5W6!n#``Xd=;1hC1sTN z4y$JEY%?R#Z>%P25p?P6-d3AjBlYTAu_wLzeNZH?(gBq}a6-lOBy>(c=KWczOJ1Xi zfSewZ8hX8WqOP>w&lJ9@Y@#8HMFC^>Dxw%Y(rY+w1p3#@qFlb<3mqqh%D3l{#uIXb z5+_c7RpiTkCE|Q%?Wi;9k34=2xn+-+6hnul;9wT8FoTLC9vf=$O_fic*gjMK zP0dj1c-MleS$QP!(+z$9*QD#Kn2Lf=jjEgtE7CZ4Zr(Lj$a7AzOit+QxuXU7^z5Wm zkY=mphiyCA{iP!VVjm2HTi(>qLhYUJ)$O$v7EFK`S{+H4fGRGOfg;9QjRmKU?t81; zee?%39h8nIaq>By93MUt0p!e=KsgQ;YP@LDA9;_7<u>@w9)kf@5E|zh+yyxE`7EgcXB(p3TfAC>(?t`2}i=J$8*LT|CJ~8>%L8r)V zEQYJQmLDZsgAr{8SfA(zBh7Wnu2>n*6ldcv3LqG#2QBru>w{c3j&xSd2G(~(mV5>J zN7fkn4X>W=;VpsDZux`FKnz~Me>(2`xA*@2{LSH~rpjLp{Pl?D-@uD!G&)57bYOEC z_}6~-pMl=!=GlMleqXk8x$XJOQX~3A_fiw|GWc?@?ictL{%<>XmknGN{J#wBqbuvb z{{3(JsQ=!I4Eb-Z{M