From d93c9c520de8dda2f4cfcadb642aa5f7fc8e378d Mon Sep 17 00:00:00 2001 From: Josh Micich Date: Mon, 1 Sep 2008 02:26:33 +0000 Subject: [PATCH] Fixed IF() to handle different types for the first arg git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@690836 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hssf/record/formula/functions/If.java | 47 ++++++++++-------- .../poi/hssf/data/FormulaEvalTestData.xls | Bin 153088 -> 153600 bytes 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/If.java b/src/java/org/apache/poi/hssf/record/formula/functions/If.java index 4b3e10a19f..4b066b8226 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/If.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/If.java @@ -30,29 +30,32 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public final class If implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { - - Eval evalWhenFalse = BoolEval.FALSE; - switch (args.length) { - case 3: - evalWhenFalse = args[2]; - case 2: - boolean b; - try { - b = evaluateFirstArg(args[0], srcCellRow, srcCellCol); - } catch (EvaluationException e) { - return e.getErrorEval(); - } - if (b) { - return args[1]; - } - return evalWhenFalse; - default: - return ErrorEval.VALUE_INVALID; - } - } + public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + Eval falseResult; + switch (args.length) { + case 3: + falseResult = args[2]; + break; + case 2: + falseResult = BoolEval.FALSE; + break; + default: + return ErrorEval.VALUE_INVALID; + } + boolean b; + try { + b = evaluateFirstArg(args[0], srcCellRow, srcCellCol); + } catch (EvaluationException e) { + return e.getErrorEval(); + } + if (b) { + return args[1]; + } + return falseResult; + } - private static boolean evaluateFirstArg(Eval arg, int srcCellRow, short srcCellCol) throws EvaluationException { + private static boolean evaluateFirstArg(Eval arg, int srcCellRow, short srcCellCol) + throws EvaluationException { ValueEval ve = OperandResolver.getSingleValue(arg, srcCellRow, srcCellCol); Boolean b = OperandResolver.coerceValueToBoolean(ve, false); if (b == null) { diff --git a/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls b/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls index e1193179fe82d74f371a555c4c4e860e50e6e71f..51e370bfb96d6ba0c5c2429a0b8cdcebadad0b81 100644 GIT binary patch delta 2636 zcmZuzdsLI>8GoMl{X%Y#phX~75s)efDz|E)GLsl-Po+~fYCWP0T9`N)^MX>_IdZyT zGA~v6THbZGgW5SgtLJ#hsh>J$Q|GFdXzZjNU?*5z3+gLeP2Ag^qxKX%~Q~@x9B*c-mhVcnBIOq;m@7MlW3GzO21^!>*U+gPfVV*&4<-s zG$}9FEH^E6Y>k9G@ptL!|4P%(@UnctkSzaKrypR$^--267wL_WSfcE{&te%Q!Da*i z29ZX?pa(xc)+d;95WxzE*+9j|`m_NFy&)==ERQwZA2stnGfa7)a>0-oi!k+JjRaHm zw`JcqL}lr(pBs;jvwpFR27(!;uc}(Ux~_V0?V_@(6?H2b$?e9As$DY_FRoos`$AR8 z;)MgLA&_%j4%?ELi^<88zSM2d0PK?hM!8QmX zEfHa?1!4Fwg!e`u{39LV)Ds9D*$A`q5&k+AVaU@6+e#7U{|MnP)d+zl2rt&69p zSiBm+=|R}vh;Y=0P|=J~^9F+F9ctP|4f_$oA0io}L7!0W9D@Bk!n__7=Zx%ULR`Td zf5qzSI@WR8Kl_!b6889;*RJBcY)gyZyly;VuRL}A6TEeyPhPbCQ=a*|7TLZbj~|Hf z%5@udW51lSaXU|a-75z-?%;cTu=|*QhkSP=-jcT~Be+lY`j0D5n)ZE&jK@I6z7s5sZ>C;N zUoIojiG79KbI2{%_St#n37@>TZwjwC;+FgSCh%ceuRrT@zYfFxp_1_~(~1CDQ18^bB!iUCg5F)++*(V4(v2fW|M z)jkLHX`_8#HcH{JIz<=G2AAl~#pB%W@QHnSxU(S!R6jxO5#{P{>pNZ7I_X10~4qiHE{hGTdOQ6z|WHygv9h2IEJ60 zFJt)(oX9;}TEwmyXf?FT-pH+w=VEsgCJLzpllV^AD^f}@pYI{^!xDUs=|ajMOYnM} z)caBy6WiwEle~9bp6Hs36L^4%9xKNzzGszNOf9D|0U|XjffGLQMmg13wO;YJa{Pr9 zcsGxWvU!*%wG&f*Jr9#~`~)eyQ;FkwkQzU!#9S61651*p$C5+J#40?M!%{;crim1L z=ne{+=ni_{%@aRuLMuN*%{!a0koOSjZX(ycL=t3jof%S=$Y>tPJxAPP&3>H3E9j*j z+D}WPpL9$L)^m8lCwvNiPYS%Zjf;;I{4p;hvjqomCXc6F;{kk%dngh*fY0&{GC1NO zx>#;VR2`)06<;)p)`R#w@28=+58`C*(RqdS5SB7)NUT4EdHj~_Ro*{@*@KupB(An$ z3VS*vVuP5<3WH)CUHK(aEe+xrcBf6OQ4@#TM2njE4f#GABn{nbUhz$ko^dK!NtpmqOc9qo;<8P9;-*;dE5B#%H zbal{M+(Q!vcVZsP2#V>Qm?>4O#mhQr!u2-MN)aAUv)ejpb}r4n*@@%0T9VmCdIv~v zP8a60V4K*`g~jYxo6_Ee7Kxwv$S3;GV==c=ldYTH$}A$a-Rd4hdT)2*Xg*67?k3@W zy8oNq>i1Ib78yM%Y4eHF9{OBZq#mZYR!!#B+_&Kn34iY_Bt`knlr?x7_vW-e#2QL9isg|T@- zaXXI9=X2;y%r&tr?rHXlwI;TLS5oATiDh#iMaG!f0^UmGRWo~=FRgbg`SI*DDxNY{ zgZl@wTUM-5{__m`oXxU1Y*wqo;j%iNc@HB!&fuEmEK0W(+g#RSht-xxnCP%YLD{FK x6{R~09TS{|&I0E&r_Je7QK)2npAA99K9ku|4^ms?Uq3EiSUph*%wl%U{{RKO_t*dc delta 2518 zcmZuz4Nz3q6+Y+Qx3Ie`yHH_)2rD8g1khdnTm$GL_%jVLkkEz+Sh9^oh=dR^qG_jW zZEVS66n(~POeQ6n#?XnAYIouTld)(U#0sxwqzbDYfocubQete2&D8CAfFWs}op0Z_ z-#tIyzI*qb^&ByH4jWo?(Qq{HG@{<8V;h*E4d%SQ-*5(v@{7_>*l&a7e@oAr+pZr! zpovq9@+RFTbL*^AlhV1rg;2cjmTsKkDS6l!Eq|#uOtUz{6tl{ChLB0kDp%fPCI(T^ ziU7c1GSL`5^YK$dggF%vobWN5j`-9tce;eZI8`iKPBY$X_2@lj%$=z+Y_ysXmVdoQ zgt_{gWq)IwDogJ^9`d_I&XE_WAy{DLma0wLHdoiwZ78j3*xay#+};_{>{?(|O`W^$ z>8hfd?@up9!htX3z|tso1m)<5uIpQL07oSN`D9LnZ+4CpkK26lnb*HzHhp4qb5OMT9?Y zMfjizAz=r?qGp8N*ANB{Al!V1k`7bCF@%lXRJ;%2^?q9OBOLw{LeCWx&zsouB4rFy zee1W~*0VQ%?|X9latUAd9sKDQ&fCj`Z%qDF9Az6u z?TpIijArsRkmT!+{^EW3deQ7tw^?283`{G2H)J5&Z5XThh zs>Uo5rtop*7I_k;a^P-JtC6Q%e({EcCEP^H-!&zgh)sufp2*!wi4L8~O(CGyjt>A@ zK+nS9JVW?jt^YpS#rtRj_t7rhN4q?unZIg$MH3b4V$49)iErC6p(&Nz=)g5;4?s`k zJPQg~!G>UCV2EMCV557a=dgm3gCIj&hx~8E2M6N*FWv|?X)29tY59~EJefB1iB}2) zv^M%c3Wyta?BUSu6(2gVUG%48t#~p6x5qqAKcrNQ1v6+^Fnw)gwaPy-a3qRtR>k1M z_#m&R4G1d2CA_pu2v-q0`GD0ceo%y&e2B=ei!hykM&x=Ceuveo%CblBcBtek6I^7M zV-|1U^K(&Gj@f*ig5E2~WNxPoJYP`(3ro^qoC_SH`0!ylJF&~iJqNWP%tX36oRN*34ttw}$urHOZSH;1-T17H_dM}yw zPqtu1u!&L>go=9Y&;GCeu%;NEW#Chh`U0)Vy!}lu9fP%qhKR% zBNE$z%OqHPSrXstz-M?rnLXWskMbk57SoBVd57IEp6%>AKy=Y^_s%Y!Q`1wWZ zA<#B-xh^=MheQitSN?X|avLdACuN-aUF*dM*&0=Z_fbmWS1AT9#RzOB#V~nF?DSo~ z+edwq$dR{?wxx@{#<4z3V=h%(>%&BrtBMenu1-~PsOT{+$ega)sFSE_VGu}N`CBH9 zkOGgWmEs2W*m?pJrOh1TeygyJWoP(Ibfo?+GARUP{)cepNI+&f#*dQiJU0Sft zPrXxBk?F@IZYNijesXn=T($Ud5!XUKrVtKvmv8zpoh7Lv{t~WYiKoKyVMFw+a8kXjAza8^THzro3_7=H8KSddBGRD|52arlqGK3K9c;to zSnF9jOgG6%O7k#oXYs0H8bMPqhcvI4J&GHGiAb)5%i@($3?LJ)+`yE)P>i9`8%Ohu zPyLRko=z|+p^nz*i2*u#F{VW^D~Xz9MJtNWZ(vu*tgAGQZXuk!H8T`y_TR+Vrn`Ya zAdCvqcmf((Kyw&E31)(YKqCxje8IN}vj`D{NCJ&Dh$2K29v~zVW)tEFT1|Q&0gXF| zC(I=z5atnR^g$9~0bwDM_hjYmn^=i^>ZSc-^pwjCV4QMn3=dj@KDdog52DV*>a`)( zqLc(MDm18@F}M??kZfZtRu#L8lI!5(+X4vI{epW@Tj-(wl~KC8d}}qOz=ntw4k4$l1w1VO)M;+Y+Vg IG3L_!7ZRDl&j0`b -- 2.39.5