12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533 |
- $PBExportHeader$n_dw2xls_band.sru
- forward
- global type n_dw2xls_band from nonvisualobject
- end type
- end forward
- global type n_dw2xls_band from nonvisualobject
- end type
- global n_dw2xls_band n_dw2xls_band
- type variables
- n_dw2xls_object inv_Objects[]
- n_dw2xls_Line inv_VLines[] //竖线
- n_dw2xls_Line inv_HLines[] //横线
- CONSTANT LONG COLOR_TRANSPARENT= 536870912
- Private:
- uLong il_hSheet
- string is_Name
- Long il_BkColor
- String is_BKColorExp
- Long il_BandHeight
- Long il_BottomSpaceHeight //如果数据窗口是Nest类型,当带区是detail区时,最后对象的Y2与细节区Y2之间的空白,会显示空白,这样可以插入一行空记录来实行
- Boolean ib_IsGroupBand =False
- Boolean ib_NewPage =False
- Boolean ib_FirstOut=TRUE
- Boolean ib_AutoHeight =False
- Boolean ib_HasNestReport =False
- Boolean ib_DynamicRowInfo =False //带区内的对象,如果动态调整了Y,HEIGHT的值,需要动态重新计算行列位置
-
- int ii_rowSpace=20
- Int ii_PictureObjCount=0
-
- n_dw2xls_Requestor inv_Requestor
- n_dw2xls_Layout inv_Layout
- n_dw2xls_WinApi inv_Api
- Datastore ids_Rows
-
-
- end variables
- forward prototypes
- public subroutine of_addobject (n_dw2xls_object anv_object)
- public subroutine of_sortobject_x ()
- public subroutine of_sortobject_y ()
- public subroutine of_sortline ()
- public function String of_getname ()
- public subroutine of_addhline (n_dw2xls_line anv_line)
- public subroutine of_addvline (n_dw2xls_line anv_line)
- public subroutine of_adjustposition (n_dw2xls_band anv_detail)
- public function integer of_getvlinescount ()
- public subroutine of_getlinecolrowinfo ()
- public subroutine of_setrequestor (readonly n_dw2xls_requestor anv_requestor, readonly string as_name)
- public subroutine of_registcolumninfo_1 ()
- public subroutine of_registcolumninfo_2 ()
- public function integer of_rowcount ()
- protected subroutine of_writepicture (readonly n_dw2xls_object anv_object, readonly long al_row, readonly long al_xlsrow)
- public subroutine of_calcpictureoffset ()
- public function Long of_getbkcolor ()
- public subroutine of_sortobject_row ()
- public subroutine of_setbkcolor (readonly long al_bkcolor, readonly string as_bkcolorexp)
- public subroutine of_setcellborder ()
- public subroutine of_sortobject_col ()
- public subroutine of_adjustposition ()
- public subroutine of_getobjectborderinfo ()
- public function n_dw2xls_Requestor of_getrequestor ()
- public function Boolean of_existsobject (readonly string as_name)
- public subroutine of_setdynamicrowinfo (readonly boolean ab_flag)
- public subroutine of_refreshrowinfo (long al_row)
- public subroutine of_getcolrowinfo2 ()
- public subroutine of_getcolrowinfo ()
- public subroutine of_updatecolumninfo ()
- public subroutine of_setworksheet (readonly unsignedlong al_hsheet)
- public function long of_output (readonly long al_row, readonly long al_xlsrow)
- public subroutine of_writeborder (readonly n_dw2xls_line anv_line, readonly long al_xlsrow)
- protected subroutine of_writeformat (readonly n_dw2xls_object anv_object, readonly long al_xlsrow, readonly long pcell, readonly long al_row)
- protected subroutine of_writevalue (readonly n_dw2xls_object anv_object, readonly long pcell, readonly long al_row, ref boolean ab_writevalue, ref boolean ab_samevalue)
- public subroutine of_registcolumninfo_3 ()
- public function integer of_gety1 (long ai_row)
- public function Long of_gety2 (integer ai_row)
- public subroutine of_updatebandheight (readonly long ai_height)
- public function Long of_getrowheight (integer ai_row)
- public function Long of_getbandheight ()
- public function integer of_getstartrow (long ai_y)
- public function integer of_getendrow (long ai_y)
- public function Long getrowheight (integer ai_row)
- public function Long of_getbottomspaceheight ()
- protected subroutine of_writerowheight (readonly long al_row, readonly long al_xlsrow)
- end prototypes
- public subroutine of_addobject (n_dw2xls_object anv_object);IF IsValid(anv_object) Then
- inv_objects[UpperBound(inv_objects)+1] = anv_object
- IF anv_Object.IsPicture OR anv_Object.IsGraph Then
- ii_PictureObjCount ++
- END IF
-
- IF inv_Requestor.OF_GetProcessing()<>'1' AND inv_Requestor.OF_GetProcessing()<>'4' Then
- IF anv_object.X1<inv_Layout.il_first_x1 Then
- inv_Layout.il_first_x1 = anv_Object.X1
- END IF
- IF anv_object.OF_GetTextRect_X2()>inv_Layout.il_last_x2 Then
- inv_Layout.il_last_x2 = anv_object.OF_GetTextRect_X2()
- END IF
- END IF
-
- IF inv_Requestor.OF_IsNested() AND ib_HasNestReport=False Then
- IF IsValid(anv_object.Inv_Report) Then
- ib_HasNestReport=TRUE
- END IF
- END IF
- END IF
- end subroutine
- public subroutine of_sortobject_x ();Int li,lj,li_cnt
- Boolean lb_Stop
- n_dw2xls_Object lnv_Temp
- //先按X值按序,再按Y值排序
- li_cnt = UpperBound(inv_Objects)
- lb_Stop=False
- Do While Not lb_Stop
- lb_Stop=TRUE
- For li=1 TO li_cnt -1
- lj =li+1
- IF inv_Objects[lj ].x1<inv_Objects[li].x1 OR &
- ( inv_Objects[lj ].x1=inv_Objects[li].x1 AND inv_Objects[lj ].Y1<inv_Objects[li].Y1 ) Then
- lnv_Temp = inv_Objects[lj]
- inv_Objects[lj] =inv_Objects[li]
- inv_Objects[li] = lnv_Temp
- lb_Stop=False
- END IF
- Next
- Loop
- end subroutine
- public subroutine of_sortobject_y ();Int li,lj,li_cnt
- Boolean lb_Stop
- n_dw2xls_Object lnv_Temp
- //先按Y值按序,再按x值排序
- li_cnt = UpperBound(inv_Objects)
- lb_Stop=False
- Do While Not lb_Stop
- lb_Stop=TRUE
- For li=1 TO li_cnt -1
- lj =li+1
- IF inv_Objects[lj ].y1<inv_Objects[li].y1 OR &
- (inv_Objects[lj ].y1=inv_Objects[li].y1 AND inv_Objects[lj ].X1<inv_Objects[li].X1 ) Then
- lnv_Temp = inv_Objects[lj]
- inv_Objects[lj] =inv_Objects[li]
- inv_Objects[li] = lnv_Temp
- lb_Stop=False
- END IF
- Next
- Loop
- end subroutine
- public subroutine of_sortline ();Int li,lj,li_cnt
- Boolean lb_Stop
- n_dw2xls_Line lnv_Temp
- //先按Y值按序,再按x值排序
- li_cnt = UpperBound(inv_HLines)
- lb_Stop=False
- Do While Not lb_Stop
- lb_Stop=TRUE
- For li=1 TO li_cnt -1
- lj =li+1
- IF inv_HLines[lj ].Y1 <inv_HLines[li].Y1 OR &
- (inv_HLines[lj ].Y1 = inv_HLines[li].Y1 AND inv_HLines[lj].X1< inv_HLines[li].X1) Then
- lnv_Temp = inv_HLines[lj]
- inv_HLines[lj] =inv_HLines[li]
- inv_HLines[li] = lnv_Temp
- lb_Stop=False
- END IF
- Next
- Loop
- //先按X值按序,再按Y值排序
- li_cnt = UpperBound(inv_VLines)
- lb_Stop=False
- Do While Not lb_Stop
- lb_Stop=TRUE
- For li=1 TO li_cnt -1
- lj =li+1
- IF inv_VLines[lj].x1<inv_VLines[li].x1 OR &
- (inv_VLines[lj ].X1 = inv_VLines[li].X1 AND inv_VLines[lj].Y1< inv_VLines[li].Y1) Then
- lnv_Temp = inv_VLines[lj]
- inv_VLines[lj] =inv_VLines[li]
- inv_VLines[li] = lnv_Temp
- lb_Stop=False
- END IF
- Next
- Loop
- end subroutine
- public function String of_getname ();Return is_Name
- end function
- public subroutine of_addhline (n_dw2xls_line anv_line);Int li
- n_dw2xls_Line lnv_Line
- IF IsValid(anv_Line ) Then
-
- //对于使用Border建立表格单元的数据窗口,各个单元格的横线是断开的,重新组成一条长的横线
- IF Not anv_Line.IsClone Then
- For li=1 To UpperBound(inv_HLines)
- lnv_Line = inv_HLines[li]
- IF (lnv_Line.Y1 -9 )<= anv_Line.Y1 AND (lnv_Line.Y1 +9 )>= anv_Line.Y1 Then
- IF lnv_Line.x2>=( anv_Line.x1 -20) AND lnv_Line.x1<=(anv_Line.x2 +20) AND &
- lnv_Line.PenColor = anv_Line.PenColor AND lnv_Line.PenWidth = anv_Line.PenWidth AND &
- lnv_Line.VisibleExp=anv_Line.VisibleExp Then
-
- IF lnv_Line.x1>anv_Line.x1 Then
- lnv_Line.x1 = anv_Line.x1
- END IF
- IF lnv_Line.x2<anv_Line.x2 THEN
- lnv_Line.x2 = anv_Line.x2
- END IF
- Return
- END IF
- END IF
- Next
- END IF
-
- inv_HLines[UpperBound(inv_HLines)+1] = anv_Line
-
- END IF
- end subroutine
- public subroutine of_addvline (n_dw2xls_line anv_line);Long li
- n_dw2xls_Line lnv_Line
- IF IsValid(anv_Line ) Then
-
- //对于使用Border建立表格单元的数据窗口,各个单元格的竖线是断开的,重新组成一条长的竖线
- For li=1 To UpperBound(inv_VLines)
- lnv_Line = inv_VLines[li]
- IF (lnv_Line.x1 -9 )<= anv_Line.x1 AND (lnv_Line.x1 +9 )>= anv_Line.x1 Then
- IF lnv_Line.y2>=( anv_Line.y1 -20) AND lnv_Line.y1<=(anv_Line.y2 +20) AND &
- lnv_Line.PenColor = anv_Line.PenColor AND lnv_Line.PenWidth = anv_Line.PenWidth AND &
- lnv_Line.VisibleExp=anv_Line.VisibleExp Then
-
- IF lnv_Line.y1>anv_Line.y1 Then
- lnv_Line.y1 = anv_Line.y1
- END IF
- IF lnv_Line.y2<anv_Line.y2 THEN
- lnv_Line.y2 = anv_Line.y2
- END IF
- Return
- END IF
- END IF
- Next
- inv_VLines[UpperBound(inv_VLines)+1] = anv_Line
-
- IF anv_Line.X1<inv_Layout.il_first_x1 Then
- inv_Layout.il_first_x1 = anv_Line.X1
- END IF
- IF anv_Line.X2>inv_Layout.il_last_x2 Then
- inv_Layout.il_last_x2 =anv_Line.X2
- END IF
-
- END IF
- end subroutine
- public subroutine of_adjustposition (n_dw2xls_band anv_detail);Int li, lj, lk ,li_cnt
- Long li_X1, li_X2
- n_dw2xls_Object lnv_Object , lnv_Object2 ,lnv_Object3
- IF is_Name="detail" Then
- Return
- END IF
- anv_Detail.OF_SortObject_X()
- li_cnt =UpperBound(anv_Detail.inv_Objects)
- For li=1 To UpperBound(inv_Objects)
- lnv_Object = inv_Objects[li]
-
- For lj=1 TO li_cnt
- lnv_Object2= anv_Detail.inv_Objects[lj]
- IF lnv_Object.Name=lnv_Object2.Name+"_t" AND &
- lnv_Object.X1<lnv_Object2.X2 AND &
- lnv_Object.X2>lnv_Object2.X1 Then
-
- li_X1 = lnv_Object.X1
- li_X2 = lnv_Object.X2
-
- IF lnv_Object.X1>li_X1 Then
-
- //找到前面一列
- For lk =lj -1 To 1 Step -1
- lnv_Object3 = anv_Detail.inv_Objects[lk]
- IF lnv_Object3.X2<li_X1 Then
- Exit
- END IF
-
- IF ( lnv_Object3.X1<li_X1 OR lnv_Object3.X1<lnv_Object2.X1) AND &
- lnv_Object3.Y2> lnv_Object2.Y1 AND &
- lnv_Object3.Y1< lnv_Object2.Y2 Then
- IF lnv_Object3.X2>li_X1 Then
- li_X1= lnv_Object3.X2
- END IF
- Exit
- END IF
- Next
- END IF
- IF lnv_Object2.X1 >li_X1 Then
- lnv_Object2.X1 =li_X1
- END IF
-
- IF li_X2> lnv_Object2.X2 Then
- //找到后面一列
- For lk =lj +1 To li_cnt
- lnv_Object3 = anv_Detail.inv_Objects[lk]
- IF lnv_Object3.X1>li_X2 Then
- Exit
- END IF
-
- IF ( lnv_Object3.X2>li_X2 OR lnv_Object3.X2>lnv_Object2.X2) AND &
- lnv_Object3.Y2> lnv_Object2.Y1 AND &
- lnv_Object3.Y1< lnv_Object2.Y2 Then
- IF lnv_Object3.X1<li_X2 Then
- li_X2= lnv_Object3.X1
- END IF
- Exit
- END IF
- Next
- END IF
-
- IF li_X2> lnv_Object2.X2 Then
- lnv_Object2.X2 =li_X2
- END IF
-
- lnv_Object.X1= lnv_Object2.X1
- lnv_Object.X2= lnv_Object2.X2
- Exit
- END IF
- Next
- Next
- end subroutine
- public function integer of_getvlinescount ();Return UpperBound(inv_VLines)
- end function
- public subroutine of_getlinecolrowinfo ();Int li,lj, li_Find
- Int li_StartRow, li_StartCol, li_EndRow, li_EndCol
- n_dw2xls_line lnv_line
- //带区只有横线,而且是作为上一带区的下边线或下一带区的上边线用的
- IF UpperBound(inv_Objects)=0 AND UpperBound(inv_VLines)=0 AND &
- ids_Rows.RowCount()=1 AND il_BandHeight<=30 Then
-
- For li=1 TO UpperBound(inv_HLines)
- lnv_line = inv_HLines[li]
- lnv_Line.StartCol = inv_Layout.OF_GetStartColumn(lnv_Line.X1+5 )
- lnv_Line.EndCol = inv_Layout.OF_GetEndColumn(lnv_Line.X2 -5 )
- IF is_Name="header" OR is_Name="header[1]" Then
- lnv_Line.StartRow =1
- lnv_Line.EndRow =1
- lnv_Line.ii_TopBottom =1
- ELSE
- lnv_Line.StartRow =0
- lnv_Line.EndRow =0
- lnv_Line.ii_TopBottom =2
- END IF
- Next
- ids_Rows.Reset()
- Return
- END IF
- For li=1 To UpperBound(inv_VLines)
- lnv_Line = inv_VLines[li]
-
- IF lnv_Line.IsClone Then
- Continue
- END IF
-
- lnv_Line.StartRow = OF_GetStartRow(lnv_Line.Y1 )
- lnv_Line.EndRow = OF_GetEndRow(lnv_Line.Y2 )
-
- li_Find=inv_Layout.ids_Columns.Find("x2="+String(lnv_Line.x1),1,inv_Layout.ids_Columns.RowCount())
- IF li_Find>0 Then
- lnv_Line.StartCol = li_Find
- lnv_Line.EndCol = li_Find
- lnv_Line.ii_LeftRight =2
- Continue
- END IF
-
- li_Find=inv_Layout.ids_Columns.Find("x1="+String(lnv_Line.x1),1,inv_Layout.ids_Columns.RowCount())
- IF li_Find>0 Then
- lnv_Line.StartCol = li_Find
- lnv_Line.EndCol = li_Find
- lnv_Line.ii_LeftRight =1
- Continue
- END IF
-
-
- li_Find=inv_Layout.ids_Columns.Find("x2<"+String(lnv_Line.x1+inv_Layout.ii_ColSpace)+" AND x2> "+String(lnv_Line.x1 - inv_Layout.ii_ColSpace),1,inv_Layout.ids_Columns.RowCount())
- IF li_Find>0 Then
- lnv_Line.StartCol = li_Find
- lnv_Line.EndCol = li_Find
- lnv_Line.ii_LeftRight =2
- Continue
- END IF
-
- li_Find=inv_Layout.ids_Columns.Find("x1<"+String(lnv_Line.x1+inv_Layout.ii_ColSpace)+" AND X1> "+String(lnv_Line.x1 - inv_Layout.ii_ColSpace),1,inv_Layout.ids_Columns.RowCount())
- IF li_Find>0 Then
- lnv_Line.StartCol = li_Find
- lnv_Line.EndCol = li_Find
- lnv_Line.ii_LeftRight =1
- Continue
- END IF
- Next
- For li=1 To UpperBound(inv_HLines)
- lnv_Line = inv_HLines[li]
-
- IF lnv_Line.IsClone Then
- Continue
- END IF
- lnv_Line.StartCol = inv_Layout.OF_GetStartColumn(lnv_Line.X1+5 )
- lnv_Line.EndCol = inv_Layout.OF_GetEndColumn(lnv_Line.X2 -5 )
-
- li_Find=ids_Rows.Find("y2="+String(lnv_Line.y1),1,ids_Rows.RowCount())
- IF li_Find>0 Then
- lnv_Line.StartRow = li_Find
- lnv_Line.EndRow = li_Find
- lnv_Line.ii_TopBottom=2
- Continue
- END IF
-
- li_Find=ids_Rows.Find("y1="+String(lnv_Line.y1),1,ids_Rows.RowCount())
- IF li_Find>0 Then
- lnv_Line.StartRow = li_Find
- lnv_Line.EndRow = li_Find
- lnv_Line.ii_TopBottom =1
- Continue
- END IF
-
- li_Find=ids_Rows.Find("y2<"+String(lnv_Line.y1 + 30)+" AND Y2> "+String(lnv_Line.y1 - 30),1,ids_Rows.RowCount())
- IF li_Find>0 Then
- lnv_Line.StartRow = li_Find
- lnv_Line.EndRow = li_Find
- lnv_Line.ii_TopBottom =2
- Continue
- END IF
-
- li_Find=ids_Rows.Find("y1<"+String(lnv_Line.y1 + 30)+" AND Y1> "+String(lnv_Line.y1 -30),1,ids_Rows.RowCount())
- IF li_Find>0 Then
- lnv_Line.StartRow = li_Find
- lnv_Line.EndRow = li_Find
- lnv_Line.ii_TopBottom =1
- Continue
- END IF
-
- li_Find = ids_Rows.Find("Y1<"+String(lnv_Line.Y1)+" AND Y2>"+String(lnv_Line.Y1),1,ids_Rows.RowCount())
- IF li_Find>0 Then
- lnv_Line.StartRow = li_Find
- lnv_Line.EndRow = li_Find
- IF ( ids_Rows.GetItemNumber(li_Find,"Y2") - lnv_Line.Y1)> ( lnv_Line.Y1 - ids_Rows.GetItemNumber(li_Find,"Y1") +20 ) Then
- lnv_Line.ii_TopBottom =1
- ELSE
- lnv_Line.ii_TopBottom =2
- END IF
- Continue
- END IF
-
- li_Find=ids_Rows.Find(" Y1>"+String(lnv_Line.y1 ),1,ids_Rows.RowCount() )
- IF li_Find>0 Then
- lnv_Line.StartRow = li_Find
- lnv_Line.EndRow = li_Find
- lnv_Line.ii_TopBottom =1
- Continue
- END IF
-
- li_Find=ids_Rows.Find("y1<"+String(lnv_Line.y1 ),ids_Rows.RowCount(),1)
- IF li_Find>0 Then
- lnv_Line.StartRow = li_Find
- lnv_Line.EndRow = li_Find
- lnv_Line.ii_TopBottom =2
- Continue
- END IF
- Next
- end subroutine
- public subroutine of_setrequestor (readonly n_dw2xls_requestor anv_requestor, readonly string as_name);String ls_Value, ls_Exp
- is_Name =as_Name
- inv_Requestor = anv_requestor
- inv_Layout= anv_requestor.OF_GetLayout()
- inv_Api = anv_Requestor.OF_GetWinApi()
- IF Not inv_Requestor.OF_IsWriteBKColor() Then
- il_BkColor = COLOR_TRANSPARENT
- ELSE
- inv_Requestor.OF_GetProperty("DataWindow."+is_Name+".Color", ls_Value, ls_Exp)
- IF IsNumber(ls_Value ) Then
- il_BkColor = inv_Api.OF_GetColor(Long(ls_Value) )
- ELSE
- il_BkColor = COLOR_TRANSPARENT
- END IF
- is_BKColorExp=ls_Exp
- inv_Requestor.OF_AddExpression(is_BKColorExp)
-
- END IF
- il_BandHeight = inv_Requestor.OF_GetBandHeight(as_name)
- IF inv_Requestor.OF_Describe("DataWindow."+as_Name+".Height.AutoSize")="yes" Then
- ib_AutoHeight =TRUE
- END IF
- IF Pos(as_Name,"header.")>0 OR Pos(as_Name,"trailer.")>0 Then
- ib_IsGroupBand =TRUE
- END IF
- end subroutine
- public subroutine of_registcolumninfo_1 ();Int li , lj, li_ColSpace,li_ObjCount
- Long li_x1, li_Pre_X1, li_X2
- n_dw2xls_Object lnv_Object, lnv_Object2
- IF is_Name<>"detail" Then
- RETURN
- END IF
- //如果是Grid或 Crosstab类型的数据窗口,则按细节区的对象进行登记
- //否则按细节区的竖线进行登记
- IF inv_Requestor.OF_GetProcessing()='1' OR inv_Requestor.OF_GetProcessing()='4' Then
- For li=1 To UpperBound(inv_Objects)
- lnv_Object = inv_Objects[li]
- IF lnv_Object.ObjType="tempobj" Then
- Continue
- END IF
-
-
- IF inv_Requestor.OF_IsChild() Then
- inv_Layout.OF_RegistObject(lnv_Object.x1 ,TRUE )
- ELSE
- inv_Layout.OF_RegistColumn(lnv_Object.x1 )
- END IF
- IF lnv_Object.X2>li_X2 Then
- li_x2 = lnv_Object.X2
- END IF
- Next
- IF inv_Requestor.OF_IsChild() Then
- inv_Layout.OF_RegistObject(li_x2,FALSE )
- ELSE
- inv_Layout.OF_RegistColumn(li_x2)
- END IF
-
- ELSE
- li_Pre_X1 =0
- li_ColSpace = inv_Layout.OF_GetColSpace()
- OF_SortLine()
- For li=1 To UpperBound(inv_VLines)
-
- li_x1 =inv_VLines[li].X1
-
- //两个线条之间间隔很少,则处理为同一列
- IF ( li_x1 - li_ColSpace )<li_Pre_X1 AND li_Pre_X1>0 Then
- Continue
- END IF
-
- IF inv_Requestor.OF_IsChild() Then
- inv_Layout.OF_RegistObject(li_x1 ,TRUE)
- ELSE
- inv_Layout.OF_RegistColumn(li_x1 )
- END IF
- li_Pre_x1 = li_x1
-
- IF li_X1>li_x2 Then
- li_x2 = li_X1
- END IF
- Next
-
- li_ObjCount = UpperBound(inv_Objects)
- For li=1 To li_ObjCount
- lnv_Object = inv_Objects[li]
- IF lnv_Object.ObjType="tempobj" Then
- Continue
- END IF
-
- IF IsValid(lnv_Object.inv_LeftLine)=False AND IsValid(lnv_Object.inv_RightLine)=False Then
- IF lnv_Object.alignment='1' Then
- inv_Layout.OF_RegistObject(lnv_Object.x2 ,FALSE)
- For lj=li -1 To 1 Step -1
- lnv_Object2 = inv_Objects[lj]
- IF ( lnv_Object2.X2 +inv_Layout.ii_ColSpace)<lnv_Object.X1 Then
- Exit
- END IF
-
- IF lnv_Object2.Y1<lnv_Object.Y2 AND lnv_Object2.Y2>lnv_Object.Y1 AND &
- ( lnv_Object2.X2>=lnv_Object.X1 OR ( lnv_Object.X1 - lnv_Object2.X2)<=inv_Layout.ii_ColSpace ) Then
- IF lnv_Object2.X2 < lnv_Object.X1 Then
- inv_Layout.OF_RegistObject(lnv_Object2.x2,FALSE )
- ELSE
- inv_Layout.OF_RegistObject(lnv_Object2.x1,TRUE )
- END IF
-
- Exit
- END IF
- Next
- ELSEIF lnv_Object.alignment='2' Then
- inv_Layout.OF_RegistObject(lnv_Object.x1,TRUE )
- inv_Layout.OF_RegistObject(lnv_Object.x2 ,FALSE )
- ELSE
- inv_Layout.OF_RegistObject(lnv_Object.x1,TRUE )
- END IF
-
- IF lnv_Object.X2>li_X2 Then
- li_x2 = lnv_Object.X2
- END IF
- END IF
-
- Next
-
- IF inv_Requestor.OF_IsChild() Then
- inv_Layout.OF_RegistObject(li_x2,FALSE )
- ELSE
- inv_Layout.OF_RegistColumn(li_x2)
- END IF
- END IF
- end subroutine
- public subroutine of_registcolumninfo_2 ();IF Not IsValid(inv_Requestor) Then
- Return
- END IF
- IF Not IsValid(inv_Layout) Then
- Return
- END IF
-
- Int li, lj
- Int li_Vlines, li_HLines ,li_ObjCount
- Int li_Find
- Long li_x1, li_x2 ,li_Y1, li_Y2,li_Pre_x1 ,li_Next_X1
- Long li_ColSpace, li_RowSpace
- Boolean lb_HasLine ,lb_HasObject
- n_dw2xls_Line lnv_Line
- n_dw2xls_Object lnv_Object
- IF is_Name<>"detail" Then //如果是细节区, 已经在OF_RegistColumn_1登记过了
- li_Pre_X1 =0
- li_ColSpace = inv_Layout.OF_GetColSpace()
- For li=1 To UpperBound(inv_VLines)
- li_x1 =inv_VLines[li].X1
- //两个线条之间间隔很少,则处理为同一列
- IF ( li_x1 - li_ColSpace )<li_Pre_X1 AND li_Pre_X1>0 Then
- Continue
- END IF
- inv_Layout.OF_RegistObject(li_x1,TRUE )
- li_Pre_x1 = li_x1
- Next
- END IF
- li_ObjCount = UpperBound(inv_Objects)
- For li=1 To li_ObjCount
- IF inv_Objects[li].ObjType="report" Then
- Continue
- END IF
-
- IF inv_Objects[li].ObjType="tempobj" Then
- Continue
- END IF
-
- lnv_Object = inv_Objects[li]
- IF IsValid(lnv_Object.inv_LeftLine) AND IsValid(lnv_Object.inv_RightLine) Then
- Continue
- END IF
-
- IF ( inv_Requestor.OF_GetProcessing()="1" OR inv_Requestor.OF_GetProcessing()="4" ) AND lnv_Object.IsForeGround=False Then
- IF Not inv_Requestor.OF_ContaintBand("detail") THEN
- inv_Layout.OF_RegistColumn(lnv_Object.X1 )
- END IF
- Continue
- END IF
-
- IF lnv_Object.BorderStyle='2' OR lnv_Object.BorderStyle='4' Then
- IF lnv_Object.SkipBorder Then
- inv_Layout.OF_AddObject( lnv_Object)
- ELSE
- inv_Layout.OF_RegistObject(lnv_Object.X1,TRUE)
- inv_Layout.OF_RegistObject(lnv_Object.X2,FALSE )
- END IF
- END IF
- Next
- For li=1 To UpperBound(inv_HLines)
- lnv_Line =inv_HLines[li]
- inv_Layout.OF_RegistObject(lnv_Line.X1,TRUE)
- inv_Layout.OF_RegistObject(lnv_Line.X2,FALSE )
- Next
- end subroutine
- public function integer of_rowcount ();Return ids_Rows.RowCount()
- end function
- protected subroutine of_writepicture (readonly n_dw2xls_object anv_object, readonly long al_row, readonly long al_xlsrow);String ls_FileName
- IF anv_Object.IsGraph Then
- inv_Layout.OF_AddGraph(al_xlsRow + anv_Object.StartRow ,anv_Object.StartCol ,inv_Requestor , anv_Object.Name , anv_Object.Picture_OffsetX, anv_Object.Picture_OffsetY , anv_Object.Width , anv_Object.Height )
- ELSE
- IF anv_Object.ObjType ="bitmap" Then
- ls_FileName = anv_Object.PictureName
- ELSEIF anv_Object.ObjType="column" Then
- ls_FileName = inv_Requestor.OF_GetItemString(al_Row, anv_Object.Name)
- ELSEIF anv_Object.ObjType="compute" Then
- ls_FileName = inv_Requestor.OF_Evaluate(al_Row , anv_Object.PictureExp ) //不能用OF_GetExpValue
- END IF
-
- IF Pos(ls_FileName,":")=0 Then
- IF Left(ls_FileName,1)="\" THen
- ls_FileName =Left(inv_Api.OF_GetAppPath(),2)+ls_FileName
- ELSE
- ls_FileName=inv_Api.OF_GetAppPath() +ls_FileName
- END IF
- END IF
-
- IF FileExists(ls_FileName) Then
- inv_Layout.OF_AddPicture(al_xlsRow + anv_Object.StartRow ,anv_Object.StartCol ,ls_FileName, anv_Object.Picture_OffsetX, anv_Object.Picture_OffsetY , anv_Object.Width , anv_Object.Height )
- END IF
- END IF
-
- end subroutine
- public subroutine of_calcpictureoffset ();Int li
- n_dw2xls_Object lnv_Object
- IF ii_PictureObjCount<=0 Then
- Return
- END IF
- For li =1 To UpperBound(inv_Objects)
- lnv_Object = inv_Objects[li]
- IF lnv_Object.IsPicture OR lnv_Object.IsGraph THen
- lnv_Object.Picture_OffSetX=lnv_Object.X1 - inv_Layout.OF_GetColumn_X1( lnv_Object.StartCol )
- lnv_Object.Picture_OffSetY=lnv_Object.Y1 - OF_GetY1( lnv_Object.StartRow )
- END IF
- Next
- end subroutine
- public function Long of_getbkcolor ();Return il_BKColor
- end function
- public subroutine of_sortobject_row ();Int li,lj,li_cnt
- Boolean lb_Stop
- n_dw2xls_Object lnv_Temp
- //先按行按序,再按列排序
- li_cnt = UpperBound(inv_Objects)
- lb_Stop=False
- Do While Not lb_Stop
- lb_Stop=TRUE
- For li=1 TO li_cnt -1
- lj =li+1
- IF inv_Objects[lj ].StartRow<inv_Objects[li].StartRow OR &
- (inv_Objects[lj ].StartRow=inv_Objects[li].StartRow AND inv_Objects[lj ].StartCol<inv_Objects[li].StartCol ) OR &
- (inv_Objects[lj ].StartRow=inv_Objects[li].StartRow AND inv_Objects[lj ].StartCol=inv_Objects[li].StartCol AND inv_Objects[lj ].EndRow<inv_Objects[li].EndRow ) Then
- lnv_Temp = inv_Objects[lj]
- inv_Objects[lj] =inv_Objects[li]
- inv_Objects[li] = lnv_Temp
- lb_Stop=False
- END IF
- Next
- Loop
- end subroutine
- public subroutine of_setbkcolor (readonly long al_bkcolor, readonly string as_bkcolorexp);il_BkColor = al_BKColor
- is_BKColorExp = as_BKColorExp
- end subroutine
- public subroutine of_setcellborder ();
- Int li, lj,lk
- Int li_Row
- Int li_x1 ,li_y1, li_x2, li_y2
- Int li_StartCol, li_EndCol, li_StartRow, li_EndRow , li_StartRow2, li_EndRow2
- Int li_Pre_StartRow, li_Pre_EndRow
- Int li_StartRow3, li_EndRow3
- Int li_FirstRow , li_LastRow
- Int li_BorderBegin_Y, li_BorderBegin_Row, li_MaxRow
- Boolean lb_Flag
- n_dw2xls_Object lnv_Object
- n_dw2xls_Line lnv_Line
- n_dw2xls_Object lnv_TempObs[]
- n_dw2xls_Band lnv_Detail
- IF inv_Requestor.OF_GetProcessing()<>"1" AND inv_Requestor.OF_GetProcessing()<>'4' Then
- Return
- END IF
- //Footer区不需要处理
- IF is_Name="footer" Then
- Return
- END IF
- IF (inv_Requestor.OF_GetProcessing()='1' OR inv_Requestor.OF_GetProcessing()='4') Then
- IF is_Name='detail' Then
- For li=1 TO UpperBound(inv_Objects)
- inv_Objects[li].BorderStyle='2'
- Next
- Return
- END IF
-
- IF is_Name=inv_Requestor.OF_GetHeader_BeginBand() Then
- li_BorderBegin_Y = inv_Requestor.OF_GetHeader_BeginY()
- li_BorderBegin_Row =OF_GetStartRow(li_BorderBegin_Y)
- ELSE
- IF inv_Requestor.OF_GetProcessing()='4' AND Pos(is_name,"header")>0 Then
- IF is_Name<inv_Requestor.OF_GetHeader_BeginBand() Then
- Return
- END IF
- END IF
- li_BorderBegin_Row =1
- END IF
- li_MaxRow = ids_Rows.RowCount()
-
- IF inv_Requestor.OF_ContaintBand("detail") Then
- lnv_Detail = inv_Requestor.OF_GetBand("detail")
- For li=1 To UpperBound(lnv_Detail.inv_Objects)
- li_StartCol = lnv_Detail.inv_Objects[li].StartCol
- li_EndCol = lnv_Detail.inv_Objects[li].EndCol
- lb_Flag =False
-
- For lj=1 To UpperBound(inv_Objects)
- IF inv_Objects[lj].StartCol <= li_StartCol AND inv_Objects[lj].EndCol >= li_StartCol Then
- IF inv_Objects[lj].StartRow>=li_BorderBegin_Row Then //And inv_Objects[lj].EndRow>=li_Row Then
- inv_Objects[lj].BorderStyle='2'
- lb_Flag=TRUE
- END IF
- ELSEIF inv_Objects[lj].StartCol>li_StartCol Then
- EXIT
- END IF
- Next
-
- IF Not lb_Flag Then
- lnv_Object = Create n_dw2xls_Object
- lnv_Object.ObjType="tempobj"
- lnv_Object.StartRow =li_BorderBegin_Row
- lnv_Object.EndRow =li_MaxRow
- lnv_Object.StartCol = li_StartCol
- lnv_Object.EndCol =li_EndCol
- lnv_Object.BorderStyle='2'
- inv_Objects[ UpperBound(inv_Objects)+1] = lnv_Object
- END IF
-
- Next
- ELSE
- For li=1 To inv_Layout.OF_ColumnCount()
- li_StartCol =li
- li_EndCol =li
- lb_Flag =False
- For lj=1 To UpperBound(inv_Objects)
- IF inv_Objects[lj].StartCol <= li_StartCol AND inv_Objects[lj].EndCol >= li_StartCol Then
- IF inv_Objects[lj].StartRow>=li_BorderBegin_Row Then
- inv_Objects[lj].BorderStyle='2'
- lb_Flag=TRUE
- END IF
- ELSEIF inv_Objects[lj].StartCol > li_StartCol Then
- EXIT
- END IF
- Next
-
- IF Not lb_Flag Then
- lnv_Object = Create n_dw2xls_Object
- lnv_Object.ObjType="tempobj"
- lnv_Object.StartRow =li_BorderBegin_Row
- lnv_Object.EndRow =li_MaxRow
- lnv_Object.StartCol = li_StartCol
- lnv_Object.EndCol =li_EndCol
- lnv_Object.BorderStyle='2'
- inv_Objects[ UpperBound(inv_Objects)+1] = lnv_Object
- END IF
- Next
- END IF
- END IF
- end subroutine
- public subroutine of_sortobject_col ();Int li,lj,li_cnt
- Boolean lb_Stop
- n_dw2xls_Object lnv_Temp
- //先按列按序,再按行排序
- li_cnt = UpperBound(inv_Objects)
- lb_Stop=False
- Do While Not lb_Stop
- lb_Stop=TRUE
- For li=1 TO li_cnt -1
- lj =li+1
- IF inv_Objects[lj ].StartCol<inv_Objects[li].StartCol OR &
- (inv_Objects[lj ].StartCol=inv_Objects[li].StartCol AND inv_Objects[lj ].StartRow<inv_Objects[li].StartRow ) OR &
- (inv_Objects[lj ].StartCol=inv_Objects[li].StartCol AND inv_Objects[lj ].StartRow=inv_Objects[li].StartRow AND inv_Objects[lj ].hAlignment<inv_Objects[li].hAlignment ) Then
- lnv_Temp = inv_Objects[lj]
- inv_Objects[lj] =inv_Objects[li]
- inv_Objects[li] = lnv_Temp
- lb_Stop=False
- END IF
- Next
- Loop
- end subroutine
- public subroutine of_adjustposition ();//Int li,lj,li_cnt
- //Int li_Begin_Y
- //Boolean lb_UpObj, lb_DownObj
- //
- //IF is_Name="detail" OR is_Name="header[1]" Then
- // Return
- //END IF
- //
- //IF is_Name=inv_Requestor.OF_GetHeader_BeginBand() Then
- // li_Begin_Y =inv_Requestor.OF_GetHeader_BeginY()
- //ELSE
- // li_Begin_Y =0
- //END IF
- //
- //li_cnt = UpperBound(inv_Objects)
- //For li=1 To li_cnt
- //
- // IF inv_Objects[li].IsForeGround OR inv_Objects[li].Y1<li_Begin_Y THen
- // Continue
- // END IF
- //
- // lb_UpObj =False
- // lb_DownObj=False
- //
- // For lj=1 To li_cnt
- // IF li = lj Then
- // Continue
- // END IF
- //
- // IF (inv_Objects[lj].x1+10)>inv_Objects[li].x1 AND (inv_Objects[lj].x2 -10)<inv_Objects[li].x2 Then
- // IF inv_Objects[lj].Y1<inv_Objects[li].y1 Then
- // lb_UpObj =TRUE
- // ELSEIF inv_Objects[lj].Y1>inv_Objects[li].y1 Then
- // lb_DownObj =TRUE
- // END IF
- // END IF
- // Next
- //
- // IF Not lb_UpObj Then
- // inv_Objects[li].Y1 = li_Begin_Y
- // END IF
- //
- // IF Not lb_DownObj Then
- // inv_Objects[li].Y2=il_BandHeight
- // END IF
- //Next
- end subroutine
- public subroutine of_getobjectborderinfo ();IF Not IsValid(inv_Requestor) Then
- Return
- END IF
- IF Not IsValid(inv_Layout) Then
- Return
- END IF
-
- Int li, lj
- Int li_Vlines, li_HLines ,li_ObjCount
- Int li_Find
- Long li_x1, li_x2 ,li_Y1, li_Y2,li_Pre_x1 ,li_Next_X1
- Long li_ColSpace, li_RowSpace
- Boolean lb_HasLine ,lb_HasObject
- n_dw2xls_Line lnv_Line
- n_dw2xls_Object lnv_Object, lnv_Object2
- li_Vlines = UpperBound(inv_VLines)
- li_HLines = UpperBound(inv_HLines)
- IF li_Vlines = 0 AND li_HLines=0 Then
- Return
- END IF
- //对线条进行排序
- OF_SortLine()
- //两条横线之间,没有任何对象,则插入一个空对象,以便生成行记录
- For li=li_HLines To 2 Step -1
- lb_HasObject =False
-
- IF (inv_HLines[li].Y1 - inv_HLines[ li -1].Y1)<50 Then
- Continue
- END IF
-
- For lj=1 To UpperBound(inv_Objects)
- lnv_Object = inv_Objects[lj]
- IF lnv_Object.Y1>= (inv_HLines[ li -1].Y1 -30 ) AND lnv_Object.Y2<=(inv_HLines[ li ].Y1 +30 ) Then
- lb_HasObject=TRUE
- Exit
- END IF
- NEXT
-
- IF Not lb_HasObject Then
- lnv_object = Create n_dw2xls_object
- lnv_object.objType="tempobj"
- lnv_object.inv_TopLine = inv_HLines[ li -1]
- lnv_object.inv_BottomLine = inv_HLines[ li ]
- lnv_Object.OF_SetPosition(inv_HLines[li].X1+30, inv_HLines[ li -1].Y1+20, inv_HLines[li].X1+50 ,inv_HLines[ li].Y1 -20 ,"" ,"" ,"" ,"" )
- OF_AddObject(lnv_object)
- END IF
- Next
- li_ObjCount = UpperBound(inv_Objects)
- //先查找对象的左、右边线
- IF li_Vlines>0 Then
- OF_SortObject_X()
-
- For li=1 TO li_ObjCount
- lnv_Object = inv_Objects[li]
-
- IF lnv_Object.ObjType="report" OR lnv_Object.ObjType="tempobj" OR &
- lnv_Object.IsBorderOnly OR lnv_Object.IsPicture Then
- Continue
- END IF
-
- li_x1= lnv_Object.x1
- li_y1 = lnv_Object.y1
- li_x2= lnv_Object.x2
- li_y2 = lnv_Object.y2
-
- //查找左边线
- lb_HasLine=False
- lb_HasObject=False
-
- For lj=li_Vlines To 1 Step -1
- lnv_Line = inv_VLines[lj]
- IF lnv_Line.Y1<=(li_y1 +30) AND lnv_Line.Y2>=( li_y2 -30 ) AND lnv_Line.X1<( li_x1 +30 ) Then //对象可能超过边线一点,所以加上30
- lb_HasLine=TRUE
- Exit
- END IF
- Next
-
- IF lb_HasLine THEN
- For lj=li -1 TO 1 Step -1 //与左线条之间,有没其它对象
- IF (inv_Objects[lj].x2 -30 )< lnv_Line.x1 Then
- Exit
- END IF
-
- IF inv_Objects[lj].ObjType="report" Or inv_Objects[lj].ObjType="tempobj" OR &
- inv_Objects[lj].IsBorderOnly OR inv_Objects[lj].IsPicture Then
- Continue
- END IF
- IF ( inv_Objects[lj].Y1+30)<li_y2 AND ( inv_Objects[lj].Y2 -30) >li_y1 Then
- lnv_Object.Inv_LeftObject = inv_Objects[lj]
- inv_Objects[lj].inv_RightObject= lnv_Object
- SetNull(inv_Objects[lj].inv_LeftLine)
- lb_HasObject=TRUE
- Exit
- END IF
- Next
- IF Not lb_HasObject THEN
- lnv_Object.inv_LeftLine = lnv_Line
- END IF
- END IF
-
- //如果没有左边线,则没必要查找是否有右边线了,因为不是一个完整的单元格了
- IF Not IsValid(lnv_Object.inv_LeftLine) Then
- Continue
- END IF
-
- //查找右边线
- lb_HasLine=False
- lb_HasObject=False
- For lj=1 To li_Vlines
- lnv_Line = inv_VLines[lj]
- IF lnv_Line.Y1<=( li_y1+30) AND lnv_Line.Y2>=( li_y2 - 30)AND lnv_Line.X1>(li_x2 -30) Then //对象可以超过边线一点,所以减去30
- lb_HasLine=TRUE
- Exit
- END IF
- Next
-
- IF lb_HasLine Then
- For lj=li +1 TO li_ObjCount ////与右边线之间,有没其它对象
- IF ( inv_Objects[lj].x1+30)> lnv_Line.x1 Then
- Exit
- END IF
- IF inv_Objects[lj].ObjType="tempobj" OR inv_Objects[lj].IsBorderOnly Then
- Continue
- END IF
- IF ( inv_Objects[lj].Y1+30)<li_y2 AND ( inv_Objects[lj].Y2 -30) >li_y1 Then
- lnv_Object.Inv_RightObject = inv_Objects[lj]
- inv_Objects[lj].inv_LeftObject= lnv_Object
- SetNull(inv_Objects[lj].inv_RightLine)
- lb_HasObject=TRUE
- Exit
- END IF
- Next
-
- IF Not lb_HasObject THEN
- lnv_Object.inv_RightLine = lnv_Line
- END IF
- END IF
- Next
- END IF
- IF li_HLines>0 Then
- OF_SortObject_Y()
- For li=1 TO li_ObjCount
- lnv_Object = inv_Objects[li]
- IF lnv_Object.ObjType="report" OR lnv_Object.ObjType="tempobj" OR &
- lnv_Object.IsPicture Or lnv_Object.IsBorderOnly Then
- Continue
- END IF
- li_x1= lnv_Object.x1
- li_y1 = lnv_Object.y1
- li_x2= lnv_Object.x2
- li_y2 = lnv_Object.y2
- //查找上边线
- lb_HasLine=False
- lb_HasObject=False
- For lj=li_HLines To 1 Step -1
- lnv_Line = inv_HLines[lj]
- IF lnv_Line.X1<li_x2 AND lnv_Line.X2>li_x1 AND lnv_Line.Y1<( li_y1 +30 ) Then
- lb_HasLine=TRUE
- Exit
- END IF
- Next
-
- IF lb_HasLine THEN
- IF IsValid(lnv_Object.inv_LeftLine) Then
- li_x1 = lnv_Object.inv_LeftLine.X1
- ELSE
- li_X1 = Min(lnv_Line.X1, lnv_Object.X1)
- END IF
-
- IF IsValid(lnv_Object.inv_RightLine) Then
- li_x2 = lnv_Object.inv_RightLine.X1
- ELSE
- li_X2 = Max(lnv_Line.X2, lnv_Object.X2)
- END IF
-
- For lj=li -1 TO 1 Step -1 //与上线条之间,有没其它对象
- lnv_Object2 =inv_Objects[lj]
- IF (inv_Objects[lj].Y2 -30) < lnv_Line.Y1 Then
- Exit
- END IF
-
- IF inv_Objects[lj].ObjType="report" Or inv_Objects[lj].ObjType="tempobj" OR &
- inv_Objects[lj].IsBorderOnly OR inv_Objects[lj].IsPicture Then
- Continue
- END IF
-
- IF ( lnv_Object2.X1+30)<li_x2 AND (lnv_Object2.X2 -30)>li_x1 Then //AND ( lnv_Object2.OF_GetTextRect_Y2() -15)<lnv_Object.Y1
- lnv_Object.Inv_UpObject =lnv_Object2
- lnv_Object2.inv_DownObject= lnv_Object
- SetNull(lnv_Object2.inv_TopLine)
- lb_HasObject=TRUE
- Exit
- END IF
- Next
- IF Not lb_HasObject THEN
- lnv_Object.inv_TopLine = lnv_Line
- END IF
- END IF
-
- //查找下边线
- li_x1= lnv_Object.x1
- li_x2= lnv_Object.x2
- lb_HasLine=False
- lb_HasObject=False
- For lj=1 To li_HLines
- lnv_Line = inv_HLines[lj]
- IF lnv_Line.X1<li_x2 AND lnv_Line.X2>li_x1 AND lnv_Line.Y1>=(li_Y2 -30) Then
- lb_HasLine=TRUE
- Exit
- END IF
- Next
-
- IF lb_HasLine THEN
- IF IsValid(lnv_Object.inv_LeftLine) Then
- li_x1 = lnv_Object.inv_LeftLine.X1
- ELSE
- li_X1 = Min(lnv_Line.X1, lnv_Object.X1)
- END IF
-
- IF IsValid(lnv_Object.inv_RightLine) Then
- li_x2 = lnv_Object.inv_RightLine.X1
- ELSE
- li_X2 = Max(lnv_Line.X2, lnv_Object.X2)
- END IF
-
- For lj=li+1 TO li_ObjCount
- lnv_Object2=inv_Objects[lj]
- IF (lnv_Object2.Y1+30)> lnv_Line.Y1 Then
- Exit
- END IF
-
- IF inv_Objects[lj].ObjType="tempobj" OR inv_Objects[lj].IsBorderOnly Then
- Continue
- END IF
- IF (lnv_Object2.X1+30)<li_X2 AND (lnv_Object2.X2 -30)>li_X1 Then // AND ( lnv_Object2.Y1+15)>lnv_Object.OF_GetTextRect_Y2()
- lnv_Object.Inv_DownObject =lnv_Object2
- lnv_Object2.inv_UpObject= lnv_Object
- SetNull(lnv_Object2.inv_BottomLine)
- lb_HasObject=TRUE
- Exit
- END IF
- Next
- IF Not lb_HasObject THEN
- lnv_Object.inv_BottomLine = lnv_Line
- END IF
- END IF
- Next
- END IF
- end subroutine
- public function n_dw2xls_Requestor of_getrequestor ();Return inv_Requestor
- end function
- public function Boolean of_existsobject (readonly string as_name);Int li,li_cnt
- li_cnt =UpperBound(inv_Objects)
- For li=1 TO li_cnt
- IF inv_Objects[li].Name = as_Name Then
- Return TRUE
- END IF
- Next
- Return False
- end function
- public subroutine of_setdynamicrowinfo (readonly boolean ab_flag);ib_DynamicRowInfo = ab_Flag
- end subroutine
- public subroutine of_refreshrowinfo (long al_row);Long li,li_cnt
- Boolean lb_RowInfoChange
- li_cnt = UpperBound(inv_Objects)
- For li=1 To li_cnt
- IF inv_Objects[li].OF_UpdatePosition(al_Row) Then
- lb_RowInfoChange =TRUE
- END IF
- Next
- IF Not lb_RowInfoChange Then
- Return
- END IF
- //li_cnt = UpperBound(inv_VLines)
- li_cnt = UpperBound(inv_Objects)
- For li=1 To li_cnt
- inv_Objects[li].StartRow =1
- inv_Objects[li].EndRow =1
- Next
- OF_GetColRowInfo2()
- OF_SortObject_Row()
- end subroutine
- public subroutine of_getcolrowinfo2 ();Long li, lj,lk,li_Loop,li_ObjCount
- Long li_Row, li_Find
- Long li_x1, li_x2 ,li_Y1, li_Y2
- Long li_Pre_x1, li_Pre_y1
- Long li_TopSpace, li_BottomSpace
- Long li_VLines, li_HLines , li_MaxRow ,li_RowCount , li_MaxY2
- String ls_Processing
- Boolean lb_HasObject,lb_HasLine,lb_InsertRows
- n_dw2xls_Line lnv_Line
- n_dw2xls_Object lnv_Object ,lnv_Object2
- ls_Processing = inv_Requestor.OF_GetProcessing()
-
- IF (ls_Processing="1" or ls_Processing="4" ) AND is_Name="detail" AND ib_HasNestReport=False Then
- ids_Rows.Reset()
- ids_Rows.InsertRow(0)
- ids_Rows.SetItem(1,"y1",0)
- ids_Rows.SetItem(1,"y2",il_BandHeight)
-
- IF is_Name="detail" AND ids_Rows.RowCount()=1 AND ib_AutoHeight Then
- For li=1 To UpperBound(inv_Objects)
- inv_Objects[li].VAlignment=inv_Api.VAlign_TOP
- Next
- END IF
-
- Return
- END IF
- OF_SortObject_Y()
- li_ObjCount = UpperBound(inv_Objects)
- ids_Rows.Reset()
- //判断行数
- li_MaxRow =1
- For li_Loop=1 To 2 //需要循环执行两次
- For li=1 To li_ObjCount
- lnv_Object = inv_Objects[li]
-
- IF Not lnv_Object.Visible Then
- Continue
- END IF
-
- IF IsValid(lnv_Object.inv_TopLine) AND IsValid(lnv_Object.inv_BottomLine) AND &
- IsValid(lnv_Object.inv_LeftLine) AND IsValid(lnv_Object.inv_RightLine) Then
- li_Y1 = lnv_Object.inv_TopLine.Y1
- li_Y2 = lnv_Object.inv_BottomLine.Y1
- ELSE
- li_Y1= lnv_Object.Y1
- IF lnv_Object.BorderStyle<>'0' Then
- li_Y2 = lnv_Object.Y2
- ELSE
- li_Y2 = lnv_Object.OF_GetTextRect_Y2()
- END IF
- END IF
-
- IF li_Y1>=li_Y2 Then
- Continue
- END IF
-
- IF li_Y2>li_MaxY2 Then
- li_MaxY2 =li_Y2
- END IF
-
- //找到对象的开始行
- For lj=li -1 To 1 Step -1
- IF IsValid( inv_Objects[lj].inv_BottomLine) Then
- IF inv_Objects[lj].inv_BottomLine.Y1<= li_Y1 THen
- lnv_Object.StartRow = inv_Objects[lj].EndRow +1
- lnv_Object.EndRow= lnv_Object.StartRow
- Exit
- END IF
- ELSEIF (inv_Objects[lj].Y1<li_Y1 -15) AND (inv_Objects[lj].Y2<(li_Y1+15) OR inv_Objects[lj].OF_GetTextRect_Y2() <(li_Y1+15)) Then //加15是避免Y2与Y1重叠在一起的情况
- lnv_Object.StartRow = inv_Objects[lj].EndRow +1
- lnv_Object.EndRow= lnv_Object.StartRow
- Exit
- END IF
- Next
-
- //找到对象的结束行
- lb_HasObject =False
- For lj=li+1 To li_ObjCount
-
- IF Not inv_Objects[lj].Visible Then
- Continue
- END IF
-
- IF IsValid(inv_Objects[lj].inv_TopLine) AND &
- inv_Objects[lj].inv_TopLine = lnv_Object.inv_BottomLine Then
- IF inv_Objects[lj].StartRow>lnv_Object.StartRow Then
- lnv_Object.EndRow = inv_Objects[lj].StartRow -1
- END IF
- lb_HasObject=TRUE
- Exit
- ELSEIF (inv_Objects[lj].Y1+20)>li_Y2 Then
- IF inv_Objects[lj].StartRow>lnv_Object.StartRow Then
- lnv_Object.EndRow = inv_Objects[lj].StartRow -1
- END IF
- lb_HasObject=TRUE
- Exit
- END IF
- NEXT
-
- IF lnv_Object.EndRow>li_MaxROW Then
- li_MaxROW = lnv_Object.EndRow
- END IF
-
- IF Not lb_HasObject Then
- lnv_Object.EndRow = li_MaxROW
- END IF
-
- IF lnv_Object.StartRow>lnv_Object.EndRow Then
- lnv_Object.StartRow = lnv_Object.EndRow
- END IF
-
- IF li_Loop <2 Then
- Continue
- END IF
-
- For lj=ids_Rows.RowCount()+1 To li_MaxROW
- ids_Rows.InsertRow(0)
- ids_Rows.SetItem(ids_Rows.RowCount(),"Y1",90000 )
- ids_Rows.SetItem(ids_Rows.RowCount(),"TextRect_y1",90000)
- Next
-
-
- IF IsValid(lnv_Object.inv_TopLine) AND IsValid(lnv_Object.inv_BottomLine) Then
- ids_Rows.SetItem(lnv_Object.StartRow,"TopLine","1")
- IF lnv_Object.inv_TopLine.Y1<ids_Rows.GetItemNumber(lnv_Object.StartRow,"Y1") Then
- ids_Rows.SetItem(lnv_Object.StartRow ,"Y1",lnv_Object.inv_TopLine.Y1)
- END IF
- ELSEIF li_Y1<ids_Rows.GetItemNumber(lnv_Object.StartRow,"Y1") Then
- ids_Rows.SetItem(lnv_Object.StartRow ,"Y1",li_Y1)
- END IF
-
- IF IsValid(lnv_Object.inv_TopLine) AND IsValid(lnv_Object.inv_BottomLine) Then
- ids_Rows.SetItem(lnv_Object.EndRow,"BottomLine","1")
- IF lnv_Object.inv_BottomLine.Y2>ids_Rows.GetItemNumber(lnv_Object.EndRow,"Y2") Then
- ids_Rows.SetItem(lnv_Object.EndRow ,"Y2",lnv_Object.inv_BottomLine.Y2)
- END IF
- ELSEIF li_Y2>ids_Rows.GetItemNumber(lnv_Object.EndRow,"Y2") Then
- ids_Rows.SetItem(lnv_Object.EndRow ,"Y2",li_Y2)
- END IF
- IF lnv_Object.Y1<ids_Rows.GetItemNumber(lnv_Object.StartRow,"TextRect_y1") Then
- ids_Rows.SetItem(lnv_Object.StartRow ,"TextRect_y1",lnv_Object.Y1)
- END IF
-
- IF lnv_Object.OF_GetTextRect_Y2() >ids_Rows.GetItemNumber(lnv_Object.EndRow,"TextRect_y2") Then
- ids_Rows.SetItem(lnv_Object.EndRow ,"TextRect_y2",lnv_Object.OF_GetTextRect_Y2() )
- END IF
- Next
- Next
- IF ids_Rows.RowCount()=0 Then
- ids_Rows.InsertRow(0)
- ids_Rows.SetItem(1,"Y1",0)
- ids_Rows.SetItem(1,"Y2",il_BandHeight)
- END IF
- IF ls_Processing='3' Then
- ids_Rows.SetItem(1,"Y1",0)
- IF inv_Requestor.OF_GetControlHeight()>0 Then
- ids_Rows.SetItem(ids_Rows.RowCount() ,"Y2",inv_Requestor.OF_GetControlHeight())
- END IF
- For li=1 To ids_Rows.RowCount() -1
- IF ids_Rows.GetItemNumber(li,"Y2")> ids_Rows.GetItemNumber(li+1,"Y1") Then
- ids_Rows.SetItem(li,"Y2", ids_Rows.GetItemNumber(li+1,"Y1"))
- END IF
- Next
- Return
- END IF
- For li=1 To ids_Rows.RowCount()
- ids_Rows.SetItem(li,"OldRowNum",li) //先保存原来的行号码,为下一步更新对象的行记录提供对应依据
- Next
- IF is_Name="detail" AND inv_Requestor.OF_IsNested() Then
- il_BottomSpaceHeight = il_BandHeight - li_MaxY2
- IF il_BottomSpaceHeight<=20 Then
- il_BottomSpaceHeight =0
- END IF
- END IF
- IF ib_AutoHeight Then
- il_BandHeight = li_MaxY2
- END IF
- //if is_name="detail" then
- // ids_rows.saveas("c:\rows1.txt",text!,true)
- //END IF
- IF (ls_Processing="1" or ls_Processing="4" ) Then
- ids_Rows.SetItem(ids_Rows.RowCount(),"Y2",il_BandHeight)
- IF ids_Rows.RowCount()=1 Then
- Goto label1
- END IF
-
- IF Pos(is_Name,"header")<=0 Then
- ids_Rows.SetItem(0,"Y1",0)
- Goto label1
- ELSE
- IF is_Name>inv_Requestor.Of_GetHeader_BeginBand () Then
- goto label1
- ELSEIF is_Name=inv_Requestor.Of_GetHeader_BeginBand () Then
- li_Row =ids_Rows.Find("Y1>="+String(inv_Requestor.Of_GetHeader_BeginY () ),1,ids_Rows.RowCount())
- IF li_Row>0 Then
- For li= li_Row To ids_Rows.RowCount()
- ids_Rows.SetItem(li,"TopLine","1")
- ids_Rows.SetItem(li,"BottomLine","1")
- Next
- END IF
- END IF
- END IF
- END IF
- For li=1 TO UpperBound(inv_HLines)
- lnv_Line = inv_HLines[li]
- lb_HasLine=False
- li_Row = ids_Rows.Find("Y1="+String(lnv_Line.y1),1,ids_Rows.RowCount())
- IF li_Row>0 Then
- ids_Rows.SetItem(li_Row,"TopLine","1")
- li_Row = ids_Rows.Find("Y2="+String(lnv_Line.y1),1,ids_Rows.RowCount())
- IF li_Row>0 Then
- ids_Rows.SetItem(li_Row,"BottomLine","1")
- END IF
- Continue
- END IF
-
- li_Row = ids_Rows.Find("Y2="+String(lnv_Line.y1),1,ids_Rows.RowCount())
- IF li_Row>0 Then
- ids_Rows.SetItem(li_Row,"BottomLine","1")
- Continue
- END IF
- IF li_MaxROW>1 Then
- For lj=li_MaxROW To 2 Step -1
- IF ( ids_Rows.GetItemNumber(lj -1,"Y2") -30)<lnv_Line.y1 AND (ids_Rows.GetItemNumber(lj,"Y1")+30)>lnv_Line.y1 AND &
- ( ids_Rows.GetItemString(lj,"TopLine")<>"1" AND ids_Rows.GetItemString(lj -1,"BottomLine")<>"1" ) AND &
- (( ids_Rows.GetItemNumber(lj ,"Y1") - ids_Rows.GetItemNumber(lj -1,"Y2"))<60) Then
-
- ids_Rows.SetItem(lj,"Y1",lnv_Line.Y1)
- ids_Rows.SetItem(lj,"TopLine",'1' )
-
- ids_Rows.SetItem(lj -1,"Y2",lnv_Line.Y1)
- ids_Rows.SetItem(lj -1,"BottomLine",'1' )
- lb_HasLine=TRUE
- Exit
- END IF
- Next
- END IF
-
- IF lb_HasLine Then
- Continue
- END IF
-
- IF lnv_Line.Y1< ids_Rows.GetItemNumber(1,"Y1") Then
- IF ids_Rows.GetItemNumber(1,"Y1") - lnv_Line.Y1>=50 Then
- lb_InsertRows =TRUE
- li_Y2 = ids_Rows.GetItemNumber(1,"Y1")
- li_Row=ids_Rows.InsertRow(1)
- ids_Rows.SetItem(li_Row,"Y1",lnv_Line.Y1)
- ids_Rows.SetItem(li_Row,"Y2",li_Y2)
- ids_Rows.SetItem(li_Row,"TopLine","1")
- ids_Rows.SetItem(li_Row,"textRect_Y1",lnv_Line.Y1)
- ids_Rows.SetItem(li_Row,"textRect_Y2",li_Y2)
-
- li_MaxROW++
- END IF
-
- ELSEIF lnv_LIne.Y1> ids_Rows.GetItemNumber(ids_Rows.RowCount(),"Y2") Then
- IF lnv_Line.Y1 - ids_Rows.GetItemNumber(ids_Rows.RowCount(),"Y2") >=50 Then
- lb_InsertRows =TRUE
- li_Y1 = ids_Rows.GetItemNumber(ids_Rows.RowCount(),"Y2")
- li_Row=ids_Rows.InsertRow(0)
- ids_Rows.SetItem(li_Row,"BottomLine","1")
- ids_Rows.SetItem(li_Row,"Y1",li_Y1)
- ids_Rows.SetItem(li_Row,"Y2",lnv_Line.Y1 )
- ids_Rows.SetItem(li_Row,"textRect_Y1",li_Y1)
- ids_Rows.SetItem(li_Row,"textRect_Y2",lnv_Line.Y1)
-
- li_MaxROW++
- END IF
- ELSE
- li_Row = ids_Rows.Find("Y1>"+String(lnv_Line.Y1),1,ids_Rows.RowCount())
- IF li_Row >0 Then
- IF ids_Rows.GetItemString(li_Row,'TopLine')='1' THen
- li_Y2 = ids_Rows.GetItemNumber(li_Row,"Y1")
- ELSE
- li_Y2 = ids_Rows.GetItemNumber(li_Row,"TextRect_Y1")
- END IF
-
- //跟下边距的距离比较多,则插入空行
- //如果跟上边距离较多
- IF (( li_Y2 - lnv_Line.Y1 )>=50 AND ids_Rows.GetItemString(li_Row,'TopLine')<>'1' ) OR &
- (( li_Y2 -lnv_Line.Y1 )>=30 AND ids_Rows.GetItemString(li_Row,'TopLine')='1' ) Then
-
- lb_HasObject=False
- For lj=1 To li_ObjCount
- lnv_Object = inv_Objects[lj]
- IF lnv_Object.NoContaint Then
- Continue
- END IF
- IF lnv_Object.Y2>(lnv_Line.Y1+ii_RowSpace) AND lnv_Object.Y1<( li_Y2 - ii_RowSpace)Then
- lb_HasObject =TRUE
- Exit
- END IF
- Next
-
- IF Not lb_HasObject Then
- lb_InsertRows =TRUE
-
- li_Row=ids_Rows.InsertRow(li_Row )
-
- ids_Rows.SetItem(li_Row -1,"BottomLine","1")
- ids_Rows.SetItem(li_Row -1, "Y2",lnv_Line.Y1)
-
- ids_Rows.SetItem(li_Row,"TopLine","1")
- ids_Rows.SetItem(li_Row,"Y1",lnv_Line.Y1)
- ids_Rows.SetItem(li_Row,"Y2",li_Y2 )
- ids_Rows.SetItem(li_Row,"textRect_Y1",lnv_Line.Y1)
- ids_Rows.SetItem(li_Row,"textRect_Y2",li_Y2)
-
- li_MaxROW++
- END IF
- Continue
-
- END IF
- END IF
-
- li_Row = ids_Rows.Find("Y2<"+String(lnv_Line.Y1),ids_Rows.RowCount(),1)
- IF li_Row >0 Then
- IF ids_Rows.GetItemString(li_Row,'BottomLine')='1' THen
- li_Y1 = ids_Rows.GetItemNumber(li_Row,"Y2")
- ELSE
- li_Y1 = ids_Rows.GetItemNumber(li_Row,"TextRect_Y2")
- END IF
- IF li_Row<ids_Rows.RowCount() Then
- IF ids_Rows.GetItemString(li_Row+1,"TopLine")="1" Then
- li_Y2 = ids_Rows.GetItemNumber(li_Row,"Y1")
- ELSE
- li_Y2 = ids_Rows.GetItemNumber(li_Row,"TextRect_Y1")
- END IF
- ELSE
- li_Y2 =il_BandHeight
- END IF
-
- //跟上边距的距离比较多,而且这范围内没有对象,则插入空行
- IF (( lnv_Line.Y1 - li_Y1 )>=50 AND ids_Rows.GetItemString(li_Row,'BottomLine')<>'1' ) OR &
- (( lnv_Line.Y1 -li_Y1 )>=30 AND ids_Rows.GetItemString(li_Row,'BottomLine')='1' ) Then
-
- lb_HasObject=False
- For lj=1 To li_ObjCount
- lnv_Object = inv_Objects[lj]
- IF lnv_Object.NoContaint Then
- Continue
- END IF
- IF lnv_Object.Y2>(li_Y1+ii_RowSpace) AND lnv_Object.Y1<( lnv_Line.Y1 -ii_RowSpace) Then
- lb_HasObject =TRUE
- Exit
- END IF
- Next
-
- IF Not lb_HasObject Then
- lb_InsertRows =TRUE
- li_Row=ids_Rows.InsertRow(li_Row+1 )
- ids_Rows.SetItem(li_Row,"Y1",li_Y1)
- ids_Rows.SetItem(li_Row,"Y2", lnv_Line.Y1)
- ids_Rows.SetItem(li_Row,"BottomLine","1")
- ids_Rows.SetItem(li_Row,"textRect_Y1",li_Y1 )
- ids_Rows.SetItem(li_Row,"textRect_Y2",lnv_Line.Y1)
- li_MaxROW++
- END IF
-
- Continue
- END IF
- END IF
-
- END IF
- Next
- //if is_name="header" then
- // ids_rows.saveas("c:\rows2.txt",text!,true)
- //END IF
- //计算行间距
- For li=1 To ids_Rows.RowCount()
-
- IF ids_Rows.GetItemString(li,"TopLine")="1" AND ids_Rows.GetItemString(li,"BottomLine")="1" Then
- ids_Rows.SetItem(li,"TopSpace",0)
- ids_Rows.SetItem(li,"BottomSpace",0)
- Continue
- END IF
-
- //上边距
- IF li=1 Then
- IF ids_Rows.GetItemString(li,"TopLine")="1" Then
- ids_Rows.SetItem(1,"TopSpace", ids_Rows.GetItemNumber(1,"Y1"))
- ELSE
- ids_Rows.SetItem(1,"TopSpace", ids_Rows.GetItemNumber(1,"textRect_Y1"))
- END IF
- ELSE
- IF ids_Rows.GetItemString(li,"TopLine")="1" Then
- IF ids_Rows.GetItemString(li -1 ,"BottomLine")="1" Then
- ids_Rows.SetItem(li,"TopSpace", ids_Rows.GetItemNumber( li ,"Y1") - ids_Rows.GetItemNumber(li -1,"y2") )
- ELSE
- ids_Rows.SetItem(li,"TopSpace", ids_Rows.GetItemNumber( li ,"Y1") - ids_Rows.GetItemNumber(li -1,"textRect_Y2") )
- END IF
- ELSE
- IF ids_Rows.GetItemString(li -1 ,"BottomLine")="1" Then
- ids_Rows.SetItem(li,"TopSpace", ids_Rows.GetItemNumber( li ,"textRect_Y1") - ids_Rows.GetItemNumber(li -1,"y2") )
- ELSE
- ids_Rows.SetItem(li,"TopSpace", ids_Rows.GetItemNumber( li ,"textRect_Y1") - ids_Rows.GetItemNumber(li -1,"y2") )
- END IF
- END IF
- END IF
- IF li = ids_Rows.RowCount() Then
- IF ids_Rows.GetItemString(li,"BottomLine")="1" Then
- ids_Rows.SetItem(li,"BottomSpace", il_BandHeight - ids_Rows.GetItemNumber(li,"Y2"))
- ELSE
- ids_Rows.SetItem(li,"BottomSpace", il_BandHeight - ids_Rows.GetItemNumber(li,"textRect_Y2"))
- END IF
- ELSE
- IF ids_Rows.GetItemString(li,"BottomLine")="1" Then
- IF ids_Rows.GetItemString(li +1 ,"TopLine")="1" Then
- ids_Rows.SetItem(li,"BottomSpace", ids_Rows.GetItemNumber( li+1 ,"Y1") - ids_Rows.GetItemNumber(li ,"y2") )
- ELSE
- ids_Rows.SetItem(li,"BottomSpace", ids_Rows.GetItemNumber( li+1 ,"textRect_Y1") - ids_Rows.GetItemNumber(li ,"y2") )
- END IF
- ELSE
- IF ids_Rows.GetItemString(li +1 ,"TopLine")="1" Then
- ids_Rows.SetItem(li,"BottomSpace", ids_Rows.GetItemNumber( li+1 ,"Y1") - ids_Rows.GetItemNumber(li ,"textRect_Y2") )
- ELSE
- ids_Rows.SetItem(li,"BottomSpace", ids_Rows.GetItemNumber( li+1 ,"textRect_Y1") - ids_Rows.GetItemNumber(li ,"textRect_Y2") )
- END IF
- END IF
- END IF
-
- IF ids_Rows.GetItemNumber(li,"TopSpace")<0 Then
- ids_Rows.SetItem(li,"TopSpace",0)
- END IF
-
- IF ids_Rows.GetItemNumber(li,"BottomSpace")<0 Then
- ids_Rows.SetItem(li,"BottomSpace",0)
- END IF
- Next
- //if is_name="header" then
- // ids_rows.saveas("c:\rows3.txt",text!,true)
- //END IF
- //如果对象跟后一行的间距比较多,则补入空行
- For li=ids_Rows.RowCount() To 1 Step -1
- li_TopSpace = ids_Rows.GetItemNumber(li,"TopSpace")
- li_BottomSpace = ids_Rows.GetItemNumber(li,"BottomSpace")
-
- IF li_BottomSpace>=60 Then //补入空行
- IF ids_Rows.GetItemString(li,"BottomLine")="1" Then
- li_Y1 =ids_Rows.GetItemNumber(li,"Y2")
- ids_Rows.SetItem(li,"BottomSpace",0)
- lb_InsertRows =TRUE
- li_Row=ids_Rows.InsertRow(li+1)
- ids_Rows.SetItem(li_Row,"Y1",li_Y1)
- ids_Rows.SetItem(li_Row,"Y2",li_Y1 + li_BottomSpace)
- ELSE
- IF ids_Rows.GetItemString(li,"TopLine")="1" Then
- li_Y1 =ids_Rows.GetItemNumber(li,"TextRect_Y2") + ( ids_Rows.GetItemNumber(li,"TextRect_Y1") -ids_Rows.GetItemNumber(li,"Y1"))
- IF li=ids_Rows.RowCount() Then
- li_Y2 =il_BandHeight
- ELSE
- li_Y2 = ids_Rows.GetItemNumber(li+1,"Y1")
- END IF
- ids_Rows.SetItem(li,"BottomSpace",0)
-
- lb_InsertRows =TRUE
- li_Row=ids_Rows.InsertRow(li+1)
- ids_Rows.SetItem(li_Row,"Y1",li_Y1)
- ids_Rows.SetItem(li_Row,"Y2",li_Y2)
- ELSE
- IF li_TopSpace<=60 Then
- li_Y1 =ids_Rows.GetItemNumber(li,"TextRect_Y2") +li_TopSpace/2
- IF li>1 Then
- ids_Rows.SetItem(li -1 , "BottomSpace",ids_Rows.GetItemNumber(li -1, "BottomSpace") - li_TopSpace/2)
- END IF
- //ELSE
- // li_Y1+=20
- // IF li>1 Then
- // ids_Rows.SetItem(li -1 , "BottomSpace",ids_Rows.GetItemNumber(li -1, "BottomSpace") -20)
- // END IF
- END IF
- IF li=ids_Rows.RowCount() Then
- li_Y2 =il_BandHeight
- ELSE
- li_Y2 = ids_Rows.GetItemNumber(li+1,"Y1")
- END IF
- ids_Rows.SetItem(li,"BottomSpace",0)
-
- lb_InsertRows =TRUE
- li_Row=ids_Rows.InsertRow(li+1)
- ids_Rows.SetItem(li_Row,"Y1",li_Y1)
- ids_Rows.SetItem(li_Row,"Y2",li_Y2)
- END IF
- END IF
- ELSE
- IF li<ids_Rows.RowCount() AND li_BottomSpace>=30 Then //两个横线之间的间隔
- IF ids_Rows.GetItemString(li,"BottomLine")="1" AND ids_Rows.GetItemString(li+1,"TopLine")="1" Then
- li_Y1 = ids_Rows.GetItemNumber(li,"Y2")
- li_Y2 = ids_Rows.GetItemNumber(li+1,"Y1")
-
- lb_InsertRows =TRUE
- li_Row=ids_Rows.InsertRow(li+1)
- ids_Rows.SetItem(li_Row,"Y1",li_Y1)
- ids_Rows.SetItem(li_Row,"Y2",li_Y2)
- END IF
- END IF
- END IF
- Next
- //if is_name="header" then
- // ids_rows.saveas("c:\rows4.txt",text!,true)
- //END IF
- //处理第一行的上边距
- li_TopSpace = ids_Rows.GetItemNumber(1,"TopSpace")
- IF li_TopSpace>=60 OR ( ids_Rows.GetItemString(1 ,"TopLine")="1" AND li_TopSpace>=30 ) Then //补入空行
- IF ids_Rows.GetItemString(1,"TopLine")="1" Then
- li_Y2 =ids_Rows.GetItemNumber(1,"Y1")
- ELSE
- li_Y2= ids_Rows.GetItemNumber(1,"TextRect_Y1")
- END IF
-
- lb_InsertRows =TRUE
- ids_Rows.SetItem(1,"TopSpace",0)
- li_Row=ids_Rows.InsertRow(1)
- ids_Rows.SetItem(li_Row,"Y1",0)
- ids_Rows.SetItem(li_Row,"Y2",li_Y2)
- END IF
- //处理最后一行
- IF Not ib_AutoHeight Then
-
- li_BottomSpace = ids_Rows.GetItemNumber(ids_Rows.RowCount() ,"BottomSpace")
- IF li_BottomSpace>=60 OR ( ids_Rows.GetItemString(ids_Rows.RowCount() ,"BottomLine")="1" AND li_BottomSpace>=30 ) Then //补入空行
- IF ids_Rows.GetItemString(ids_Rows.RowCount(),"BottomLine")="1" Then
- li_Y1 =ids_Rows.GetItemNumber(ids_Rows.RowCount(),"Y2")
- ELSE
- li_Y1= ids_Rows.GetItemNumber(ids_Rows.RowCount(),"TextRect_Y2")
- END IF
-
- lb_InsertRows =TRUE
- ids_Rows.SetItem(ids_Rows.RowCount(),"BottomSpace",0)
- li_Row=ids_Rows.InsertRow(0)
- ids_Rows.SetItem(li_Row,"Y1",li_Y1)
- ids_Rows.SetItem(li_Row,"Y2",il_BandHeight )
-
- END IF
- END IF
- //if is_name="detail" AND inv_Requestor.OF_IsChild()=False then
- // ids_rows.saveas("c:\rows5.txt",text!,true)
- //END IF
- label1:
- IF ids_Rows.GetItemString(1,"TopLine")<>"1" Then
- ids_Rows.SetItem(1,"Y1",0)
- END IF
- IF ids_Rows.GetItemString(ids_Rows.RowCount() ,"BottomLine")<>"1" AND ib_AutoHeight=False Then //
- ids_Rows.SetItem(ids_Rows.RowCount(),"Y2",il_BandHeight )
- END IF
- For li=1 To ids_Rows.RowCount()
- ids_Rows.SetItem(li,"NewRowNum",li)
-
- IF li<ids_Rows.RowCount() Then
- IF ids_Rows.GetItemString(li,"BottomLine")="1" Then
- IF ids_Rows.GetItemString(li+1,"TopLine")<>"1" Then
- ids_Rows.SetItem(li+1,"Y1", ids_Rows.GetItemNumber(li,"Y2"))
- END IF
- ELSEIF ids_Rows.GetItemString(li,"TopLine")="1" Then
- ids_Rows.SetItem(li,"Y2", ids_Rows.GetItemNumber(li+1,"Y1"))
- ELSE
- li_BottomSpace = ids_Rows.GetItemNumber(li+1,"Y1") - ids_Rows.GetItemNumber(li,"Y2")
- IF li_BottomSpace<=60 Then
- ids_Rows.SetItem(li,"Y2", ids_Rows.GetItemNumber(li,"Y2") +li_BottomSpace/2 )
- ELSE
- ids_Rows.SetItem(li,"Y2", ids_Rows.GetItemNumber(li,"Y2") +20 )
- END IF
- ids_Rows.SetItem(li+1,"Y1", ids_Rows.GetItemNumber(li,"Y2") )
- END IF
- END IF
- NEXT
- //if is_name="header" then
- // ids_rows.saveas("c:\rows6.txt",text!,true)
- //END IF
- IF lb_InsertRows AND ids_Rows.RowCount()>1 Then
- For li=1 To UpperBound(inv_Objects)
- lnv_Object = inv_Objects[li]
- li_Row = ids_Rows.Find("OldRowNum="+String(lnv_Object.StartRow),1, ids_Rows.RowCount())
- IF li_Row>0 Then
- lnv_Object.StartRow = ids_Rows.GetItemNumber(li_Row,"NewRowNum")
- END IF
- li_Row = ids_Rows.Find("OldRowNum="+String(lnv_Object.EndRow),1, ids_Rows.RowCount())
- IF li_Row>0 Then
- lnv_Object.EndRow = ids_Rows.GetItemNumber(li_Row,"NewRowNum")
- END IF
- Next
- li_MaxROW = ids_Rows.RowCount()
- END IF
- For li=1 To ids_Rows.RowCount() -1
- IF ids_Rows.GetItemNumber(li,"Y2")> ids_Rows.GetItemNumber(li+1,"Y1") Then
- ids_Rows.SetItem(li,"Y2", ids_Rows.GetItemNumber(li+1,"Y1"))
- END IF
- Next
- ////检查所有单元,避免多个对象输出到同一单元
- OF_SortObject_Col()
- li_ObjCount = UpperBound(inv_Objects)
- For li=1 TO li_ObjCount
- lnv_Object = inv_Objects[li]
-
- IF Not lnv_Object.Visible Then
- Continue
- END IF
-
- IF lnv_Object.StartCol = lnv_Object.EndCol Then
- Continue
- END IF
-
- IF lnv_Object.NoContaint AND lnv_Object.BorderStyle='0' Then
- Continue
- END IF
-
- IF lnv_Object.ObjType="report" OR lnv_Object.ObjType="tempobj" THEN
- Continue
- END IF
-
- //与前面是否有对象重复输出相同的单元
- For lj=li -1 To 1 Step -1
- lnv_Object2=inv_Objects[lj]
- IF Not lnv_Object2.Visible Then
- Continue
- END IF
-
- IF lnv_Object2.NoContaint AND lnv_Object.BorderStyle='0' Then
- Continue
- END IF
-
- IF lnv_Object2.ObjType="report" OR lnv_Object2.ObjType="tempobj" THEN
- Continue
- END IF
-
- IF lnv_Object2.StartRow<=lnv_Object.EndRow AND &
- lnv_Object2.EndRow>=lnv_Object.StartRow AND &
- lnv_Object2.EndCol <lnv_Object.StartCol Then
- Exit
- END IF
-
- IF lnv_Object2.StartRow<=lnv_Object.EndRow AND &
- lnv_Object2.EndRow>=lnv_Object.StartRow AND &
- lnv_Object2.StartCol<=lnv_Object.EndCol AND &
- lnv_Object2.EndCol>=lnv_Object.StartCol Then
-
- //如果上一对象实际需要显示的内容,与当前对象开始列很近
- IF lnv_Object2.EndCol> lnv_Object2.StartCol Then
- li_x1 = inv_Layout.OF_GetColumn_X1( lnv_Object.StartCol )
- IF (lnv_Object2.x2 - li_x1)<100 OR ( lnv_Object2.OF_GetTextRect_X2() -ii_RowSpace)< li_x1 Then
- lnv_Object.EndCol = lnv_Object2.StartCol -1
- EXIT
- END IF
- END IF
-
- //如果当前对象离下一列很近,或实际显示的内容在下一列
- IF lnv_Object.EndCol>lnv_Object2.EndCol Then
- li_x2 = inv_Layout.OF_GetColumn_X2( lnv_Object2.EndCol )
- IF ( li_X2 - lnv_Object.X1 )<100 OR ( lnv_Object2.OF_GetTextRect_X1()+ii_RowSpace) > li_x2 Then
- lnv_Object.StartCol =lnv_Object2.EndCol+1
- EXIT
- END IF
- END IF
-
- //则按对象的实际显示位置,再处理一次
- IF lnv_Object2.Alignment='0' Then
- lnv_Object2.EndCol = inv_Layout.OF_GetEndColumn( lnv_Object2.OF_GetTextRect_X2() )
- IF lnv_Object2.EndCol < lnv_Object.StartCol Then
- Continue
- END IF
- END IF
-
- IF lnv_Object.Alignment='1' Then
- lnv_Object.StartCol= inv_Layout.OF_GetEndColumn( lnv_Object.OF_GetTextRect_X1() )
- IF lnv_Object.StartCol> lnv_Object2.EndCol Then
- Continue
- END IF
- END IF
-
- IF lnv_Object.Alignment<>'0' Then
- lnv_Object.StartCol =inv_Layout.OF_GetStartColumn( lnv_Object.OF_GetTextRect_X1() )
- lnv_Object.EndCol =inv_Layout.OF_GetEndColumn( lnv_Object.OF_GetTextRect_X2() )
- END IF
-
- IF lnv_Object2.Alignment='2' Then
- lnv_Object2.StartCol =inv_Layout.OF_GetStartColumn( lnv_Object2.OF_GetTextRect_X1() )
- lnv_Object2.EndCol =inv_Layout.OF_GetEndColumn( lnv_Object2.OF_GetTextRect_X2() )
- END IF
-
- IF lnv_Object2.Alignment='0' AND lnv_Object2.VisibleExp="" AND lnv_Object.VisibleExp="" AND &
- lnv_Object2.EndCol> lnv_Object2.StartCol AND lnv_Object2.EndCol = lnv_Object.StartCol Then
- lnv_Object2.EndCol = lnv_Object.StartCol -1
- Exit
- END IF
-
- IF lnv_Object.Alignment='1' AND lnv_Object2.VisibleExp="" AND lnv_Object.VisibleExp="" AND &
- lnv_Object.EndCol> lnv_Object.StartCol AND lnv_Object.StartCol = lnv_Object2.EndCol Then
- lnv_Object.StartCol = lnv_Object2.EndCol +1
- Exit
- END IF
-
- lnv_Object.CellHasMultiObjects =TRUE
- lnv_Object2.CellHasMultiObjects =TRUE
- END IF
- Next
-
-
- //与后面是否有
- For lj=li +1 To li_ObjCount
- lnv_Object2=inv_Objects[lj]
-
- IF Not lnv_Object2.Visible Then
- Continue
- END IF
-
- IF lnv_Object2.NoContaint AND lnv_Object.BorderStyle='0' Then
- Continue
- END IF
-
- IF lnv_Object2.ObjType="report" OR lnv_Object2.ObjType="tempobj" THEN
- Continue
- END IF
-
- IF lnv_Object2.StartRow<=lnv_Object.EndRow AND &
- lnv_Object2.EndRow>=lnv_Object.StartRow AND &
- lnv_Object2.EndCol <lnv_Object.StartCol Then
- Exit
- END IF
-
- IF lnv_Object2.StartRow<=lnv_Object.EndRow AND &
- lnv_Object2.EndRow>=lnv_Object.StartRow AND &
- lnv_Object2.StartCol<=lnv_Object.EndCol AND &
- lnv_Object2.EndCol>=lnv_Object.StartCol Then
-
- //如果下一对象实际需要显示的内容,与当前对象开始列很近
- li_x1 = inv_Layout.OF_GetColumn_X1( lnv_Object2.StartCol )
- IF Abs(lnv_Object.x2 - li_x1)<100 OR ( lnv_Object.OF_GetTextRect_X2() -ii_RowSpace)< li_x1 Then
- lnv_Object.EndCol = lnv_Object2.StartCol -1
- EXIT
- END IF
-
- lnv_Object.CellHasMultiObjects =TRUE
- lnv_Object2.CellHasMultiObjects =TRUE
- END IF
- Next
- Next
- //如果自动行高
- IF is_Name="detail" AND ids_Rows.RowCount()=1 AND ib_AutoHeight Then
- For li=1 To UpperBound(inv_Objects)
- inv_Objects[li].VAlignment=inv_Api.VAlign_TOP
- Next
- END IF
- OF_GetLineColRowInfo()
- end subroutine
- public subroutine of_getcolrowinfo ();Long li, lj,lk
- Long li_Row, li_Find ,li_ObjCount, li_Count
- Long li_x1, li_x2 ,li_Y1, li_Y2
- Long li_Pre_x1, li_Pre_y1
- String ls_Processing
- Boolean lb_HasObject
- n_dw2xls_Object lnv_Object
- n_dw2xls_Line lnv_Line
- //先处理子数据窗口对象
- For li=1 TO UpperBound(inv_Objects)
- IF inv_Objects[li].ObjType="report" AND IsValid( inv_Objects[li].inv_Report) Then
- inv_Objects[li].inv_Report.OF_GetColRowInfo()
- END IF
- Next
- //判断对象的起止列
- OF_SortObject_X()
- li_ObjCount = UpperBound(inv_Objects)
- ls_Processing = inv_Requestor.OF_GetProcessing()
-
- For li=1 TO li_ObjCount
- lnv_Object = inv_Objects[li]
- IF Not lnv_Object.Visible Then
- Continue
- END IF
-
- IF IsValid(lnv_Object.inv_LeftLine) AND IsValid(lnv_Object.inv_RightLine) AND &
- IsValid(lnv_Object.inv_TopLine) AND IsValid(lnv_Object.inv_BottomLine) Then
- lnv_Object.StartCol = inv_Layout.OF_GetStartColumn( lnv_Object.inv_LeftLine.x1 )
- lnv_Object.EndCol = inv_Layout.OF_GetEndColumn( lnv_Object.inv_RightLine.X1 )
- ELSE
- lnv_Object.StartCol = inv_Layout.OF_GetStartColumn( lnv_Object.x1 )
- lnv_Object.EndCol = inv_Layout.OF_GetEndColumn( lnv_Object.X2 )
-
- /*
- IF lnv_Object.EndCol>lnv_Object.StartCol Then
- IF ls_Processing<>"1" AND ls_Processing<>"4" AND is_Name<>"detail" Then
- IF IsValid(lnv_Object.inv_LeftLine)=False AND IsValid(lnv_Object.inv_RightLine) =False Then
- IF lnv_Object.Alignment='1' Then
- lnv_Object.StartCol = inv_Layout.OF_GetStartColumn( lnv_Object.OF_GetTextRect_X1() )
- ELSEIF lnv_Object.Alignment='2' Then
- lnv_Object.StartCol = inv_Layout.OF_GetStartColumn( lnv_Object.OF_GetTextRect_X1() )
- lnv_Object.EndCol = inv_Layout.OF_GetEndColumn( lnv_Object.OF_GetTextRect_X2() )
- ELSE
- lnv_Object.EndCol = inv_Layout.OF_GetEndColumn( lnv_Object.OF_GetTextRect_X2() )
- END IF
- END IF
- END IF
- END IF
- */
-
- END IF
-
- IF lnv_Object.StartCol<inv_Requestor.OF_GetFirstColumn() Then
- inv_Requestor.OF_SetFirstColumn( lnv_Object.StartCol)
- END IF
-
- IF lnv_Object.EndCol>inv_Requestor.OF_GetLastColumn() Then
- inv_Requestor.OF_SetLastColumn( lnv_Object.EndCol)
- END IF
- Next
- For li=1 TO li_ObjCount
- lnv_Object = inv_Objects[li]
-
- IF Not lnv_Object.Visible Then
- Continue
- END IF
-
- //查找前面一列
- IF lnv_Object.BorderStyle='2' OR ( ls_Processing='1' OR ls_Processing='4') Then
- IF lnv_Object.StartCol>1 Then
- IF (inv_Layout.OF_GetColumn_X1(lnv_Object.StartCol) - lnv_Object.X1)>10 AND &
- ( lnv_Object.X1 - inv_Layout.OF_GetColumn_X1(lnv_Object.StartCol -1))<=50 then //inv_Layout.ii_ColSpace Then
- //前面是否有相同的对象?
- lb_HasObject=False
- For lj= li -1 To 1 Step -1
- IF inv_Objects[lj].Y1<lnv_Object.Y2 AND inv_Objects[lj].Y2>lnv_Object.Y1 AND inv_Objects[lj].EndCol>= (lnv_Object.StartCol -1) Then
- lb_HasObject=TRUE
- Exit
- END IF
- NEXT
- IF Not lb_HasObject Then
- lnv_Object.StartCol =lnv_Object.StartCol -1
- END IF
- END IF
- END IF
-
- IF lnv_Object.EndCol<inv_Layout.OF_ColumnCount() Then
- IF ( lnv_Object.X2 - inv_Layout.OF_GetColumn_X2(lnv_Object.EndCol))>10 AND &
- ( inv_Layout.OF_GetColumn_X1(lnv_Object.EndCol +1) - lnv_Object.X2)<=50 Then
- //后面是否有相同的对象?
- lb_HasObject=False
- For lj= li +1 To li_ObjCount
- IF inv_Objects[lj].Y1<lnv_Object.Y2 AND inv_Objects[lj].Y2>lnv_Object.Y1 AND inv_Objects[lj].StartCol<= (lnv_Object.EndCol +1) Then
- lb_HasObject=TRUE
- Exit
- END IF
- NEXT
- IF Not lb_HasObject Then
- lnv_Object.EndCol =lnv_Object.EndCol +1
- END IF
- END IF
- END IF
- END IF
- Next
- //IF is_Name="detail" Then
- // inv_Layout.ids_Columns.SaveAs("c:\columns.Txt",Text!,True)
- //END IF
- //Grid或Crosstab形式的数据窗口,细节区对象的起止行号都为1,不需要特别处理
- IF (ls_Processing="1" or ls_Processing="4" ) AND is_Name="detail" AND ib_HasNestReport=False Then
- ids_Rows.InsertRow(0)
- ids_Rows.SetItem(1,"y1",0)
- ids_Rows.SetItem(1,"y2",il_BandHeight)
-
- IF is_Name="detail" AND ids_Rows.RowCount()=1 AND ib_AutoHeight Then
- For li=1 To UpperBound(inv_Objects)
- inv_Objects[li].VAlignment=inv_Api.VAlign_TOP
- Next
- END IF
-
- Return
- END IF
- //查找对象的Slideup的基准对象
- OF_SortObject_Y()
- For li=1 TO li_ObjCount
- lnv_Object = inv_Objects[li]
- IF Not lnv_Object.Visible Then
- Continue
- END IF
-
- li_x1= lnv_Object.x1
- li_y1 = lnv_Object.y1
- li_x2= lnv_Object.x2
- li_y2 = lnv_Object.y2
-
- IF lnv_Object.IsSlideup Then
- For lj=li -1 To 1 Step -1
- IF (inv_Objects[lj].objType="report" OR UpperBound(inv_Objects[lj].inv_SlideupObject)>0 ) AND &
- inv_Objects[lj].Y2 <(li_Y1+30) AND inv_Objects[lj].Y1<li_y1 AND &
- inv_Objects[lj].X2>li_x1 AND inv_Objects[lj].X1<li_x2 Then
- lnv_Object.OF_AddSlideUpObject( inv_Objects[lj])
-
- IF (inv_Objects[lj].x1 -30)<=lnv_Object.X1 AND (inv_Objects[lj].x2+30)>=lnv_Object.X2 Then
- Exit
- END IF
- END IF
- NEXT
- END IF
- Next
- OF_SortLine()
- li_Count= UpperBound(inv_HLines)
- For li=1 To li_Count
- lnv_Line = inv_HLines[li]
-
-
- li_x1= lnv_Line.x1
- li_y1 = lnv_Line.y1
- li_x2= lnv_Line.x2
- li_y2 = lnv_Line.y2
- IF lnv_Line.IsSlideup Then
- For lj=li_ObjCount To 1 Step -1
- IF (inv_Objects[lj].objType="report" OR UpperBound(inv_Objects[lj].inv_SlideupObject)>0 ) AND &
- inv_Objects[lj].Y2 <(li_Y1+30) AND inv_Objects[lj].Y1<li_y1 AND &
- inv_Objects[lj].X2>li_x1 AND inv_Objects[lj].X1<li_x2 Then
- lnv_Line.inv_SlideupObject = inv_Objects[lj]
- Exit
- END IF
- NEXT
- END IF
- Next
- li_Count= UpperBound(inv_VLines)
- For li=1 To li_Count
- lnv_Line = inv_VLines[li]
- li_x1= lnv_Line.x1
- li_y1 = lnv_Line.y1
- li_x2= lnv_Line.x2
- li_y2 = lnv_Line.y2
- IF lnv_Line.IsSlideup Then
- For lj=li_ObjCount To 1 Step -1
- IF (inv_Objects[lj].objType="report" OR UpperBound(inv_Objects[lj].inv_SlideupObject)>0 ) AND &
- inv_Objects[lj].Y2 <(li_Y1+30) AND inv_Objects[lj].Y1<li_y1 AND &
- inv_Objects[lj].X2>li_x1 AND inv_Objects[lj].X1<li_x2 Then
- lnv_Line.inv_SlideupObject = inv_Objects[lj]
- Exit
- END IF
- NEXT
- END IF
- Next
- OF_GetColRowInfo2()
- end subroutine
- public subroutine of_updatecolumninfo ();Int li, li_ObjCount
- Long li_Width
- n_dw2xls_Object lnv_Object
- li_ObjCount = UpperBound(inv_Objects)
- //如果文本所在的列,不能完整显示文本对象,则显示列的宽度,以便完整显示
- For li=1 To li_ObjCount
- lnv_Object = inv_Objects[li]
-
-
- //先处理子数据窗口对象
- IF lnv_Object.ObjType="report" Then
- IF IsValid( lnv_Object.inv_Report) Then
- lnv_Object.inv_Report.OF_UpdateColumnInfo()
- END IF
- Continue
- END IF
- IF lnv_Object.EndCol > lnv_Object.StartCol Then
- Continue
- END IF
-
- IF lnv_Object.NoContaint AND lnv_Object.BorderStyle='0' Then
- Continue
- END IF
-
- IF lnv_Object.ObjType="report" OR lnv_Object.ObjType="tempobj" THEN
- Continue
- END IF
-
- IF IsValid(lnv_Object.inv_LeftLine) AND IsValid(lnv_Object.inv_RightLine) Then
- Continue
- END IF
-
- IF lnv_Object.TextWidth>0 Then
- li_Width = inv_Layout.OF_GetColumn_Width(lnv_Object.StartCol)
-
- IF li_Width<lnv_Object.TextWidth THEN
- IF lnv_Object.TextWidth <lnv_Object.Width Then
- inv_Layout.OF_UpdateColumn_TextWidth( lnv_Object.StartCol , lnv_Object.TextWidth)
- ELSE
- inv_Layout.OF_UpdateColumn_TextWidth( lnv_Object.StartCol , lnv_Object.Width)
- END IF
- END IF
- END IF
- Next
- end subroutine
- public subroutine of_setworksheet (readonly unsignedlong al_hsheet);il_hSheet = al_hSheet
- end subroutine
- public function long of_output (readonly long al_row, readonly long al_xlsrow);Long li ,lj ,lk
- Long li_startRow ,li_StartCol, li_EndRow, li_EndCol ,li_Rows
- Long li_CurRow, li_Max_EndRow ,li_OutRows, li_DataRow
- Long pCell ,li_Cell ,li_xf
- String ls_Temp
- Boolean lb_WriteValue , lb_SameValue
- n_dw2xls_Object lnv_Object
-
- //根据对象的位置,重新计算行列位置
- IF ib_DynamicRowInfo Then // AND al_Row>1
- OF_RefreshRowInfo(al_Row )
- END IF
- //计算表达式的值
- inv_Requestor.OF_UpdateExpValues(al_Row)
- //输出行高
- OF_WriteRowHeight(al_Row , al_XlsRow)
-
- //输出背景
- IF OF_RowCount()>0 Then
- IF is_BKColorExp<>'' Then
- il_BkColor =inv_Api.OF_GetColor(Long(inv_Requestor.OF_Evaluate(al_Row,is_BKColorExp)))
- END IF
-
- IF il_BKColor>0 AND il_BkColor<>COLOR_TRANSPARENT AND il_BKColor<> inv_Requestor.OF_GetBKColor() Then
- inv_Api.SetBackColor(il_hSheet, 1+al_xlsRow, inv_Requestor.OF_GetFirstColumn() , OF_RowCount()+al_xlsRow, inv_Requestor.OF_GetLastColumn() ,il_BKColor )
- END IF
- END IF
-
- // 输出边线
- For li=1 TO UpperBound(inv_HLines)
-
- IF inv_HLines[li].IsClone Then
- Continue
- END IF
- IF inv_HLines[li].IsSlideUp AND IsValid( inv_HLines[li].inv_SlideUpObject) Then
- Continue
- END IF
- IF inv_HLines[li].VisibleExp<>"" Then
- IF Long(inv_Requestor.OF_Evaluate(al_Row,inv_HLines[li].VisibleExp))=0 Then
- Continue
- END IF
- END IF
-
- OF_WriteBorder( inv_HLines[li], al_XlsRow)
- li_EndRow = al_XlsRow + inv_HLines[li].EndRow
- IF li_EndRow > li_Max_EndRow Then
- li_Max_EndRow = li_EndRow
- END IF
- Next
- For li=1 TO UpperBound(inv_VLines)
- IF inv_VLines[li].IsClone Then
- Continue
- END IF
-
- IF inv_VLines[li].IsSlideUp AND IsValid( inv_VLines[li].inv_SlideUpObject) Then
- Continue
- END IF
-
- IF inv_VLines[li].VisibleExp<>"" Then
- IF Long(inv_Requestor.OF_Evaluate(al_Row,inv_VLines[li].VisibleExp))=0 Then
- Continue
- END IF
- END IF
- OF_WriteBorder( inv_VLines[li], al_XlsRow)
-
- li_EndRow = al_XlsRow + inv_VLines[li].EndRow
- IF li_EndRow > li_Max_EndRow Then
- li_Max_EndRow = li_EndRow
- END IF
- Next
- //输出对象内容
- For li=1 To UpperBound(inv_Objects)
-
- IF inv_Requestor.OF_IsCancel() Then
- Return -1
- END IF
-
- lnv_Object = inv_Objects[li]
-
- IF Not lnv_Object.Visible Then
- Continue
- END IF
-
- IF lnv_Object.IsBorderOnly OR ( lnv_Object.NoContaint AND lnv_Object.CellHasMultiObjects ) Then
- Continue
- END IF
-
- li_DataRow = al_Row+lnv_Object.RowInDetail -1
- IF li_DataRow>inv_Requestor.OF_RowCount() Then
- Continue
- END IF
- IF lnv_Object.VisibleExp<>"" Then
- //由于VisibleExp没有通过OF_AddExpression加入到表达式数组,所以不能用OF_GetExpValue来取值
- IF Long(inv_Requestor.OF_Evaluate(li_DataRow,lnv_Object.VisibleExp))=0 Then
- Continue
- END IF
- END IF
-
- IF IsValid(lnv_Object.inv_Report) Then
-
- IF inv_Requestor.OF_IsNested() AND al_Row>1 Then // Then
- inv_Requestor.OF_UpdateReport(al_Row, lnv_Object.Name, lnv_Object.inv_Report)
- END IF
-
- IF lnv_Object.IsSlideUp AND UpperBound(lnv_Object.inv_SlideUpObject)>0 Then
- li_CurRow = lnv_Object.OF_GetLastRow()
- IF (lnv_Object.Y1 - lnv_Object.inv_SlideUpObject[1].Y2)>=25 Then //已经从Y从大向小排序
- li_CurRow++
- lj =lnv_Object.Y1 - lnv_Object.inv_SlideUpObject[1].Y2
- lj = UnitsToPixels(lj,YUnitsToPixels!) /96*1440
- inv_Api.SetRowHeight(il_hSheet, li_CurRow, lj)
- END IF
-
- li_EndRow = lnv_Object.inv_Report.OF_OutPut(il_hSheet ,li_CurRow )
- ELSE
- li_EndRow = lnv_Object.inv_Report.OF_OutPut(il_hSheet , lnv_Object.StartRow +al_XlsRow -1 )
- END IF
- lnv_Object.LastRow = li_EndRow
-
- IF li_EndRow>li_Max_EndRow Then
- li_Max_EndRow = li_EndRow
- END IF
- Continue
- END IF
-
- IF lnv_Object.IsPicture OR lnv_Object.IsGraph Then
-
- IF inv_Requestor.OF_IsWritePictures() Then
- OF_WritePicture(lnv_Object, li_DataRow, al_XlsRow)
- END IF
- Continue
- END IF
-
- li_StartRow = lnv_Object.StartRow
- li_EndRow = lnv_Object.EndRow
- li_StartCol = lnv_Object.StartCol
- li_EndCol = lnv_Object.EndCol
-
- IF li_StartCol<1 OR li_EndCol<1 OR li_StartRow<1 OR li_EndRow<1 Then
- Continue
- END IF
-
- IF lnv_Object.IsSlideUp AND UpperBound(lnv_Object.inv_SlideUpObject)>0 Then
- li_CurRow = lnv_Object.OF_GetLastRow() +1
- ELSE
- li_CurRow = li_StartRow + al_xlsrow
- END IF
- li_EndRow = li_CurRow + li_EndRow - li_StartRow
-
- pCell = inv_Api.GetCell(il_hSheet, li_CurRow, li_StartCol)
-
- IF pCell<=0 Then
- Continue
- END IF
- lb_WriteValue=false
- lb_SameValue=False
- IF lnv_Object.ObjType<>"tempobj" AND lnv_Object.NoContaint=False Then
- OF_WriteValue(lnv_Object, pCell, li_DataRow ,lb_WriteValue,lb_SameValue ) //输出内容
- END IF
- IF lnv_Object.CellHasMultiObjects Then
- IF lb_WriteValue Then
- OF_WriteFormat(lnv_Object, li_CurRow,pCell, li_DataRow ) //输出单元格式
- END IF
- ELSEIF lnv_Object.DynamicPosition Then // OR ib_AutoHeight
- IF lb_WriteValue OR lnv_Object.PositionChanged=False Then
- OF_WriteFormat(lnv_Object, li_CurRow,pCell, li_DataRow ) //输出单元格式
- END IF
- ELSE
- OF_WriteFormat(lnv_Object, li_CurRow,pCell, li_DataRow ) //输出单元格式
- END IF
-
- IF lnv_Object.IsSparse AND lb_SameValue AND lnv_Object.LastRow>0 AND lnv_Object.LastWriteValueRow<al_Row AND al_Row>1 Then //AND inv_Requestor.OF_IsDetail_Begin()=False
- IF inv_Requestor.OF_GetProcessing()="1" OR inv_Requestor.OF_GetProcessing()="4" Then
- inv_Api.SetBorder(pCell,inv_Api.Border_TOP,inv_Api.BorderStyle_NONE, 0)
- li_Cell = inv_Api.GetCell(il_hSheet, lnv_Object.LastRow,lnv_Object.StartCol )
- IF li_Cell>0 Then
- inv_Api.SetBorder(li_Cell,inv_Api.Border_BOTTOM ,inv_Api.BorderStyle_NONE, 0)
- END IF
- END IF
- END IF
- //合并单元
- IF lnv_Object.EndRow> lnv_Object.StartRow OR lnv_Object.EndCOl>lnv_Object.StartCol Then
- IF lnv_Object.CellHasMultiObjects Then //OR ib_AutoHeight
- IF lb_WriteValue Then
- inv_Api.MergeCells(il_hSheet, li_CurRow,li_StartCol, li_EndRow, li_EndCol)
- END IF
- ELSEIF lnv_Object.DynamicPosition Then
- IF lb_WriteValue OR lnv_Object.PositionChanged=False Then
- inv_Api.MergeCells(il_hSheet, li_CurRow,li_StartCol, li_EndRow, li_EndCol)
- END IF
- ELSE
- inv_Api.MergeCells(il_hSheet, li_CurRow ,li_StartCol, li_EndRow , li_EndCol)
- END IF
- END IF
-
- IF lb_WriteValue OR ( lnv_Object.AutoHeight=False AND lnv_Object.CellHasMultiObjects =False) Then
- IF li_EndRow > li_Max_EndRow Then
- li_Max_EndRow = li_EndRow
- END IF
- END IF
- IF lnv_Object.IsSparse AND lb_WriteValue AND al_Row>1 Then
- For lj=li+1 To UpperBound(inv_Objects)
- IF inv_Objects[lj].IsSparse Then
- inv_Objects[lj].LastWriteValueRow = al_Row
- END IF
- Next
- END IF
-
- lnv_Object.LastRow =li_EndRow
- Next
- li_OutRows = li_Max_EndRow - al_xlsrow
- IF li_OutRows>OF_RowCount() Then //存在子数据窗口,则根据线条的位置重新设置边线
-
- For li=1 TO UpperBound(inv_HLines)
- IF inv_HLines[li].ii_TopBottom<>2 Then
- Continue
- END IF
- IF inv_HLines[li].IsClone Then
- Continue
- END IF
-
-
- IF inv_HLines[li].Y1Exp_RowHeight=False AND &
- ((inv_HLines[li].Y1+30)<il_BandHeight) AND &
- inv_HLines[li].IsSlideUp=False Then
- Continue
- END IF
-
- IF inv_HLines[li].VisibleExp<>"" Then
- IF Long(inv_Requestor.OF_Evaluate(al_Row,inv_HLines[li].VisibleExp))=0 Then //OF_GetExpValue
- Continue
- END IF
- END IF
-
- IF inv_HLines[li].IsSlideUp AND IsValid(inv_HLines[li].inv_SlideupObject) Then
- OF_WriteBorder( inv_HLines[li], inv_HLines[li].inv_SlideupObject.LastRow - inv_HLines[li].inv_SlideupObject.StartRow ) //+ inv_HLines[li].StartRow
-
- ELSEIF inv_HLines[li].Y1Exp_RowHeight Then
- li_StartRow = inv_HLines[li].StartRow
- li_EndRow = inv_HLines[li].EndRow
-
- inv_HLines[li].StartRow = li_OutRows
- inv_HLines[li].EndRow = li_OutRows
- OF_WriteBorder( inv_HLines[li], al_XlsRow)
- inv_HLines[li].StartRow=li_StartRow
- inv_HLines[li].EndRow= li_EndRow
- END IF
- Next
- For li=1 TO UpperBound(inv_VLines)
- IF inv_VLines[li].IsClone Then
- Continue
- END IF
- IF inv_VLines[li].Y2Exp_RowHeight=False AND ((inv_VLines[li].Y2+30)<il_BandHeight) Then
- Continue
- END IF
-
- IF inv_VLines[li].VisibleExp<>"" Then
- IF Long(inv_Requestor.OF_Evaluate(al_Row,inv_VLines[li].VisibleExp))=0 Then
- Continue
- END IF
- END IF
-
- li_EndRow = inv_VLines[li].EndRow
- inv_VLines[li].EndRow = li_OutRows
- OF_WriteBorder( inv_VLines[li], al_XlsRow)
- inv_VLines[li].EndRow= li_EndRow
- Next
- END IF
- IF ib_AutoHeight Then
- IF li_OutRows<0 Then
- li_OutRows =0
- END IF
- ELSE
- IF li_OutRows<OF_RowCount() Then
- li_OutRows =OF_RowCount()
- END IF
- END IF
- //提高生成Excel文件的效率
- IF ib_FirstOut AND (is_Name="detail" OR ib_IsGroupBand ) THEN
- For li=1 To UpperBound(inv_Objects)
- lnv_Object=inv_Objects[li]
-
- IF Not lnv_Object.WritedFormat Then //如果还没输入格式,则不通过GetXF来提高效率,因为有可以第一行Visible为0,没是正常输出了
- Continue
- END IF
-
- IF lnv_Object.FontNameExp="" AND &
- lnv_Object.FontSizeExp="" AND &
- lnv_Object.FontBoldExp="" AND &
- lnv_Object.FontItalicExp="" AND &
- lnv_Object.FontUnderlineExp="" AND &
- lnv_Object.FontStrikeoutExp="" AND &
- lnv_Object.FormatExp="" AND &
- lnv_Object.ColorExp="" AND &
- lnv_Object.BKColorExp="" AND &
- (lnv_Object.BKColor<>COLOR_TRANSPARENT OR is_BKColorExp="") AND &
- lnv_Object.IsSparse=False Then
-
- IF IsValid(lnv_Object.inv_TopLine) Then
- IF lnv_Object.inv_TopLine.VisibleExp<>'' THen
- Continue
- END IF
- END IF
-
- IF IsValid(lnv_Object.inv_BottomLine) Then
- IF lnv_Object.inv_BottomLine.VisibleExp<>'' THen
- Continue
- END IF
- END IF
-
- IF lnv_Object.IsSlideUp AND UpperBound(lnv_Object.inv_SlideUpObject)>0 Then
- li_StartRow = lnv_Object.OF_GetLastRow() +1
- li_EndRow = li_StartRow + (lnv_Object.EndRow - lnv_Object.StartRow)
- ELSE
- li_StartRow = lnv_Object.StartRow
- li_EndRow = lnv_Object.EndRow
- END IF
- li_StartCol = lnv_Object.StartCol
- li_EndCol = lnv_Object.EndCol
-
- IF li_StartCol<1 OR li_EndCol<1 OR li_StartRow<1 OR li_EndRow<1 Then
- Continue
- END IF
- li_CurRow = li_StartRow + al_xlsrow
- pCell = inv_Api.GetCell(il_hSheet, li_CurRow, li_StartCol)
- lnv_Object.xfIndex =inv_Api.GetXF(pCell)
- END IF
- Next
- END IF
- ib_FirstOut =False
- Return li_OutRows
- Return 0
- end function
- public subroutine of_writeborder (readonly n_dw2xls_line anv_line, readonly long al_xlsrow);Int li_Row, li_Col , li_Side
- Int li_StartRow ,li_EndRow, li_StartCol, li_EndCol
- Long li_CurRow,pCell
- IF anv_Line.IsClone Then
- Return
- END IF
- IF anv_Line.ii_LeftRight<>0 Then
- IF anv_Line.ii_LeftRight=1 Then
- li_Col =anv_Line.StartCol
- li_Side = inv_Api.BORDER_LEFT
- ELSE
- li_Col = anv_Line.EndCol
- li_Side = inv_Api.BORDER_RIGHT
- END IF
-
- For li_Row = anv_Line.StartRow To anv_Line.EndRow
- li_CurRow = al_xlsRow + li_Row
- pCell = inv_Api.GetCell(il_hSheet, li_CurRow, li_Col)
- inv_Api.SetBorder(pCell, li_Side, anv_Line.BorderStyle ,anv_Line.PenColor )
- Next
-
- ELSEIF anv_Line.ii_TopBottom<>0 Then
- IF anv_Line.ii_TopBottom=1 Then
- li_Row =anv_Line.StartRow
- li_Side = inv_Api.BORDER_TOP
- ELSE
- li_Row = anv_Line.EndRow
- li_Side = inv_Api.BORDER_BOTTOM
- END IF
-
- For li_Col = anv_Line.StartCol To anv_Line.EndCol
- li_CurRow = al_xlsRow + li_Row
-
- pCell = inv_Api.GetCell(il_hSheet, li_CurRow, li_Col)
- inv_Api.SetBorder(pCell, li_Side, anv_Line.BorderStyle ,anv_Line.PenColor )
- Next
-
- END IF
- end subroutine
- protected subroutine of_writeformat (readonly n_dw2xls_object anv_object, readonly long al_xlsrow, readonly long pcell, readonly long al_row);Long li ,lj
- String ls_Temp
- Long li_Temp,li_Cell, li_XF
- //输出对象的格式,如字体、对齐方式、边框等
- IF anv_Object.XFIndex<> -1 Then
- inv_Api.SetXF(pCell, anv_Object.XFIndex )
-
- ELSEIF anv_Object.NoContaint Then
- IF anv_Object.BorderStyle='2' Then
- FOR lj=anv_Object.StartCol To anv_Object.EndCol
- li_Cell = inv_Api.GetCell(il_hSheet, al_xlsRow + anv_Object.EndRow - anv_Object.StartRow,lj )
- inv_Api.SetBorder(pCell, inv_Api.borderstyle_thin, 0 )
- Next
- ELSEIF anv_Object.BorderStyle='4' Then
- FOR lj=anv_Object.StartCol To anv_Object.EndCol
- li_Cell = inv_Api.GetCell(il_hSheet, al_xlsRow + anv_Object.EndRow - anv_Object.StartRow,lj )
- inv_Api.SetBorder(pCell, inv_Api.Border_BOTTOM, inv_Api.borderstyle_thin, 0 )
- Next
- END IF
- ELSE
- IF anv_Object.ObjType="tempobj" Then
- IF is_BKColorExp<>"" Then
- //li_Temp =inv_Api.OF_GetColor( Long(inv_Requestor.OF_Evaluate(al_Row, is_BKColorExp )) )
- li_Temp =inv_Api.OF_GetColor( Long(inv_Requestor.OF_GetExpValue(is_BKColorExp,1 )) )
- IF li_Temp<>COLOR_TRANSPARENT Then
- inv_Api.SetBackColor(pCell, li_Temp )
- END IF
- ELSEIF il_BkColor<>COLOR_TRANSPARENT Then
- inv_Api.SetBackColor(pCell, il_BkColor )
- END IF
- ELSE
- IF anv_Object.FontNameExp="" Then
- inv_Api.SetFontName(pCell, anv_Object.FontName )
- ELSE
- //ls_Temp =inv_Requestor.OF_Evaluate(al_Row, anv_Object.FontNameExp)
- ls_Temp =inv_Requestor.OF_GetExpValue(anv_Object.FontNameExp,anv_Object.RowInDetail )
- IF ls_Temp="" Then
- inv_Api.SetFontName(pCell, anv_Object.FontName )
- ELSE
- inv_Api.SetFontName(pCell, ls_Temp )
- END IF
- END IF
-
- IF anv_Object.FontSizeExp="" Then
- inv_Api.SetFontSize(pCell, anv_Object.FontSize )
- ELSE
- // li_Temp =Long(inv_Requestor.OF_Evaluate(al_Row, anv_Object.FontSizeExp))
- li_Temp =Long(inv_Requestor.OF_GetExpValue( anv_Object.FontSizeExp, anv_Object.RowInDetail ))
- IF li_Temp=0 Then
- inv_Api.SetFontSize(pCell, anv_Object.FontSize )
- ELSE
- IF li_Temp>0 Then
- inv_Api.SetFontSize(pCell, inv_Requestor.OF_GetWinApi().OF_GetFontSize(li_Temp, inv_Requestor.OF_GetUnits() ) )
- ELSE
- inv_Api.SetFontSize(pCell, Abs(li_Temp) )
- END IF
- END IF
- END IF
-
- IF anv_Object.FontBoldExp="" Then
- inv_Api.SetFontBold(pCell, anv_Object.FontBold )
- ELSE
- //ls_Temp =inv_Requestor.OF_Evaluate(al_Row, anv_Object.FontBoldExp)
- ls_Temp =inv_Requestor.OF_GetExpValue(anv_Object.FontBoldExp , anv_Object.RowInDetail )
- IF ls_Temp>='700' Then
- inv_Api.SetFontBold(pCell, True )
- ELSE
- inv_Api.SetFontBold(pCell, False )
- END IF
- END IF
-
- IF anv_Object.FontItalicExp="" Then
- inv_Api.SetFontItalic(pCell, anv_Object.FontItalic )
- ELSE
- // ls_Temp =inv_Requestor.OF_Evaluate(al_Row, anv_Object.FontItalicExp)
- ls_Temp =inv_Requestor.OF_GetExpValue( anv_Object.FontItalicExp,anv_Object.RowInDetail )
- IF ls_Temp="1" OR ls_Temp="yes" Then
- inv_Api.SetFontItalic(pCell, True )
- ELSE
- inv_Api.SetFontItalic(pCell, False )
- END IF
- END IF
-
- IF anv_Object.FontUnderlineExp="" Then
- inv_Api.SetFontUnderline(pCell, anv_Object.FontUnderline )
- ELSE
- //ls_Temp =inv_Requestor.OF_Evaluate(al_Row, anv_Object.FontUnderlineExp)
- ls_Temp =inv_Requestor.OF_GetExpValue( anv_Object.FontUnderlineExp,anv_Object.RowInDetail )
- IF ls_Temp="1" OR ls_Temp="yes" Then
- inv_Api.SetFontUnderline(pCell, True )
- ELSE
- inv_Api.SetFontUnderline(pCell, False )
- END IF
- END IF
-
- IF anv_Object.FontStrikeoutExp="" Then
- inv_Api.SetFontStrikeout(pCell, anv_Object.FontStrikeout )
- ELSE
- //ls_Temp =inv_Requestor.OF_Evaluate(al_Row, anv_Object.FontStrikeoutExp)
- ls_Temp =inv_Requestor.OF_GetExpValue( anv_Object.FontStrikeoutExp,anv_Object.RowInDetail )
- IF ls_Temp="1" OR ls_Temp="yes" Then
- inv_Api.SetFontStrikeout(pCell, True )
- ELSE
- inv_Api.SetFontStrikeout(pCell, False )
- END IF
- END IF
-
- IF anv_Object.ColorExp="" Then
- IF anv_Object.Color<>COLOR_TRANSPARENT Then
- inv_Api.SetTextColor(pCell, anv_Object.Color)
- END IF
- ELSE
- //li_Temp =inv_Api.OF_GetColor( Long(inv_Requestor.OF_Evaluate(al_Row, anv_Object.ColorExp)) )
- li_Temp =inv_Api.OF_GetColor( Long(inv_Requestor.OF_GetExpValue( anv_Object.ColorExp,anv_Object.RowInDetail )) )
- IF li_Temp<>COLOR_TRANSPARENT Then
- inv_Api.SetTextColor(pCell, li_Temp )
- END IF
- END IF
-
- IF anv_Object.bkColorExp="" Then
- IF anv_Object.BkColor<>COLOR_TRANSPARENT AND anv_Object.BkColor<>inv_Requestor.OF_GetBKColor() Then
- inv_Api.SetBackColor(pCell, anv_Object.BkColor)
- END IF
- ELSE
- //li_Temp =inv_Api.OF_GetColor( Long(inv_Requestor.OF_Evaluate(al_Row, anv_Object.bkColorExp)) )
- li_Temp =inv_Api.OF_GetColor( Long(inv_Requestor.OF_GetExpValue( anv_Object.bkColorExp, anv_Object.RowInDetail )) )
- IF li_Temp<>inv_Requestor.OF_GetBKColor() AND li_Temp<>COLOR_TRANSPARENT Then
- inv_Api.SetBackColor(pCell, li_Temp )
- END IF
- END IF
-
- //输出数据格式、对齐方式
- inv_Api.SetHalignment(pCell, anv_Object.HAlignment )
- inv_Api.SetValignment(pCell, anv_Object.VAlignment )
- inv_Api.SetTextWrap(pCell,anv_Object.WrapText )
-
- IF anv_Object.FormatExp='' Then
- IF anv_Object.Format<>'' Then
- inv_Api.SetFormat(pCell, anv_Object.Format )
- END IF
- ELSE
- // ls_Temp = inv_Requestor.OF_Evaluate(al_Row, anv_Object.FormatExp)
- ls_Temp = inv_Requestor.OF_GetExpValue( anv_Object.FormatExp ,anv_Object.RowInDetail )
- IF ls_Temp<>"" Then
- inv_Api.SetFormat(pCell, ls_Temp )
- END IF
- END IF
- END IF
-
- //输出边框\颜色等
- IF anv_Object.BorderStyle='2' Then
- inv_Api.SetBorder(pCell, inv_Api.borderstyle_thin, 0)
- ELSEIF anv_Object.BorderStyle='4' Then //下边线
- inv_Api.SetBorder(pCell, inv_Api.Border_BOTTOM, inv_Api.borderstyle_thin, 0 )
- END IF
- END IF
- anv_Object.WritedFormat =TRUE
- end subroutine
- protected subroutine of_writevalue (readonly n_dw2xls_object anv_object, readonly long pcell, readonly long al_row, ref boolean ab_writevalue, ref boolean ab_samevalue);Long li_Pos ,li_Cell ,li_LastRow
- String ls_Value
- Double ldb_Value
- Date ld_Value
- Datetime ldt_Value
- Time lt_Value
- ab_WriteValue =False
- ab_SameValue =False
- IF anv_Object.IsSparse Then
- li_LastRow = anv_Object.OF_GetLastWriteValueRow()
- END IF
- //输出对象的数据内容
- IF anv_Object.ObjType="text" Then
- IF anv_Object.TextExp<>'' Then
- //ls_Value =inv_Requestor.OF_Evaluate(al_Row, anv_Object.TextExp)
- ls_Value =inv_Requestor.OF_GetExpValue( anv_Object.TextExp , anv_Object.RowInDetail )
- ELSE
- ls_Value = anv_Object.Text
- END IF
-
- IF Pos(ls_Value,"~r")>0 AND Pos(ls_Value,"~n")<=0 Then
- ls_Value=inv_Requestor.OF_ReplaceAll(ls_Value,"~r","~r~n")
- anv_Object.WrapText=TRUE
- inv_Api.SetTextWrap(pcell, TRUE )
- END IF
-
- IF IsNull(ls_Value) Then
- ls_Value=""
- END IF
-
- IF ls_Value<>'' Then
- IF anv_Object.WrapText=False AND anv_Object.Alignment='0' AND &
- (anv_Object.X1 - inv_Layout.OF_GetColumn_X1(anv_Object.StartCol ))>anv_Object.SpaceCharWidth AND anv_Object.SpaceCharWidth>0 Then
- ls_Value=Space(Ceiling( ( anv_Object.X1 - inv_Layout.OF_GetColumn_X1(anv_Object.StartCol )) / anv_Object.SpaceCharWidth) ) + ls_Value
- //ELSEIF anv_Object.Alignment='1' AND ( inv_Layout.OF_GetColumn_X2(anv_Object.EndCol ) - anv_Object.X2 )>anv_Object.SpaceCharWidth AND anv_Object.SpaceCharWidth>0 Then
- // ls_Value =ls_Value+Space(Ceiling( (inv_Layout.OF_GetColumn_X2(anv_Object.EndCol ) - anv_Object.X2 ) / anv_Object.SpaceCharWidth) )
- END IF
- inv_Api.SetValue(pcell, ls_Value )
- ab_WriteValue =TRUE
- END IF
- ELSEIF anv_Object.IsGetDisplayValue Then
- ls_Value =inv_Requestor.OF_GetDisplayValue(al_Row, anv_Object.ColID, anv_Object.Name, anv_Object.IsCloneColumn, anv_Object.EditStyle , anv_Object.ColType )
- IF IsNull(ls_Value) Then
- ls_Value=""
- END IF
-
- IF ls_Value<>"?" AND ls_Value<>"!" AND ls_Value<>"" Then
- IF anv_Object.IsSparse AND inv_Requestor.OF_IsDetail_Begin()=False THEN
- IF li_LastRow<al_Row Then
- IF anv_Object.PriorRowValue= ls_Value Then
- ab_SameValue=TRUE
- ELSE
- inv_Api.SetValue(pcell, ls_Value)
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, ls_Value)
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, ls_Value)
- ab_WriteValue =TRUE
- END IF
- END IF
-
- IF anv_Object.IsSparse Then
- IF anv_Object.PriorRowValue =ls_Value AND al_Row>1 Then
- ab_SameValue =TRUE
- ELSE
- anv_Object.PriorRowValue =ls_Value
- END IF
- END IF
-
- ELSEIF anv_Object.ObjType="column" OR anv_Object.ObjType="compute" Then
- IF anv_Object.ColType="" Then //对象的计算公式可能无效
- Return
- END IF
-
- IF anv_Object.ColType="char" Then
- IF anv_Object.ColID>0 Then
- ls_Value = inv_Requestor.OF_GetItemString(al_Row, anv_Object.ColID)
- ELSE
- ls_Value = inv_Requestor.OF_GetItemString(al_Row, anv_Object.Name)
- END IF
-
- IF IsNull(ls_Value) Then
- ls_Value=""
- END IF
-
- IF anv_Object.IsCheckBox AND anv_Object.CheckBox_Text<>"" Then
- IF anv_Object.IsSparse AND inv_Requestor.OF_IsDetail_Begin()=False Then
- IF li_LastRow<al_Row Then
- IF anv_Object.PriorRowValue=ls_Value Then
- ab_SameValue=TRUE
- ELSE
- IF ls_Value = anv_Object.CheckBox_On Then
- IF anv_Object.CheckBox_LeftText Then
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text +" √")
- ELSE
- inv_Api.SetValue(pcell, "√ "+anv_Object.CheckBox_Text )
- END IF
- ELSE
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text )
- END IF
- ab_WriteValue =TRUE
- END IF
- ELSE
- IF ls_Value = anv_Object.CheckBox_On Then
- IF anv_Object.CheckBox_LeftText Then
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text +" √")
- ELSE
- inv_Api.SetValue(pcell, "√ "+anv_Object.CheckBox_Text )
- END IF
- ELSE
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text )
- END IF
- ab_WriteValue =TRUE
- END IF
- ELSE
- IF ls_Value = anv_Object.CheckBox_On Then
- IF anv_Object.CheckBox_LeftText Then
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text +" √")
- ELSE
- inv_Api.SetValue(pcell, "√ "+anv_Object.CheckBox_Text )
- END IF
- ELSE
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text )
- END IF
- ab_WriteValue =TRUE
- END IF
- ELSE
- IF anv_Object.IsCheckBox Then
- IF ls_Value=anv_Object.CheckBox_On Then
- ls_Value=" √ "
- ELSE
- ls_Value=""
- END IF
- END IF
-
- IF ls_Value<>"" AND IsNull(ls_Value)=False Then
- IF Pos(ls_Value,"~r")>0 AND Pos(ls_Value,"~n")<=0 Then
- ls_Value=inv_Requestor.OF_ReplaceAll(ls_Value,"~r","~r~n")
- END IF
-
- IF anv_Object.IsSparse AND inv_Requestor.OF_IsDetail_Begin()=False Then
- IF li_LastRow<al_Row Then
- IF anv_Object.PriorRowValue=ls_Value Then
- ab_SameValue=TRUE
- ELSE
- inv_Api.SetValue(pcell, ls_Value)
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, ls_Value)
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, ls_Value)
- ab_WriteValue =TRUE
- END IF
- END IF
- END IF
-
- IF anv_Object.IsSparse Then
- IF anv_Object.PriorRowValue=ls_Value AND al_Row>1 Then
- ab_SameValue=TRUE
- ELSE
- anv_Object.PriorRowValue =ls_Value
- END IF
- END IF
-
- ELSEIF anv_Object.ColType="datetime" Then
- IF anv_Object.ColID>0 Then
- ldt_Value = inv_Requestor.OF_GetItemDateTime(al_Row,anv_Object.ColID)
- ELSE
- ldt_Value = inv_Requestor.OF_GetItemDateTime(al_Row,anv_Object.Name)
- END IF
-
- IF IsNull(ldt_Value)=False Then //Date(ldt_Value)<>Date("1900-01-01") AND
- IF anv_Object.IsSparse AND inv_Requestor.OF_IsDetail_Begin()=False Then
- IF li_LastRow<al_Row Then
- IF anv_Object.PriorRowValue=ldt_Value Then
- ab_SameValue=TRUE
- ELSE
- inv_Api.SetValue(pcell, inv_Api.OF_GetDoubleValue(ldt_Value) )
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, inv_Api.OF_GetDoubleValue(ldt_Value) )
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, inv_Api.OF_GetDoubleValue( ldt_Value) )
- ab_WriteValue =TRUE
- END IF
- END IF
-
- IF anv_Object.IsSparse Then
- anv_Object.PriorRowValue =ldt_Value
- END IF
- ELSEIF anv_Object.ColType="date" THEN
- IF anv_Object.ColID>0 Then
- ld_Value = inv_Requestor.OF_GetItemDate(al_Row,anv_Object.ColID)
- ELSE
- ld_Value = inv_Requestor.OF_GetItemDate(al_Row,anv_Object.Name)
- END IF
-
- IF Not IsNull(ld_Value) Then //Date(ld_Value)<>Date("1900-01-01") AND
- IF anv_Object.IsSparse AND inv_Requestor.OF_IsDetail_Begin()=False Then
- IF li_LastRow<al_Row Then
- IF anv_Object.PriorRowValue=ld_Value Then
- ab_SameValue=TRUE
- ELSE
- inv_Api.SetValue(pcell, inv_Api.OF_GetDoubleValue(ld_Value))
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, inv_Api.OF_GetDoubleValue(ld_Value))
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, inv_Api.OF_GetDoubleValue(ld_Value))
- ab_WriteValue =TRUE
- END IF
- END IF
-
- IF anv_Object.IsSparse Then
- anv_Object.PriorRowValue =ld_Value
- END IF
- ELSEIF anv_Object.ColType="time" THEN
- IF anv_Object.ColID>0 Then
- lt_Value = inv_Requestor.OF_GetItemTime(al_Row,anv_Object.ColID)
- ELSE
- lt_Value = inv_Requestor.OF_GetItemTime(al_Row,anv_Object.Name)
- END IF
-
- IF IsNull(lt_Value)=False Then
- IF anv_Object.IsSparse AND inv_Requestor.OF_IsDetail_Begin()=False Then
- IF li_LastRow<al_Row Then
- IF anv_Object.PriorRowValue=lt_Value Then
- ab_SameValue=TRUE
- ELSE
- inv_Api.SetValue(pcell, inv_Api.OF_GetDoubleValue( lt_Value) )
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, inv_Api.OF_GetDoubleValue( lt_Value) )
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, inv_Api.OF_GetDoubleValue( lt_Value))
- ab_WriteValue =TRUE
- END IF
- END IF
- IF anv_Object.IsSparse Then
- anv_Object.PriorRowValue =lt_Value
- END IF
- ELSE
- IF anv_Object.ColID>0 Then
- ldb_Value =inv_Requestor.OF_GetItemNumber(al_Row, anv_Object.ColID )
- ELSE
- ldb_Value =inv_Requestor.OF_GetItemNumber(al_Row, anv_Object.Name)
- END IF
-
- IF anv_Object.IsCheckBox AND anv_Object.CheckBox_Text<>"" Then
- IF anv_Object.IsSparse AND inv_Requestor.OF_IsDetail_Begin()=False Then
- IF li_LastRow<al_Row Then
- IF anv_Object.PriorRowValue=ls_Value Then
- ab_SameValue=TRUE
- ELSE
- IF string(ldb_Value) = anv_Object.CheckBox_On Then
- IF anv_Object.CheckBox_LeftText Then
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text +" √")
- ELSE
- inv_Api.SetValue(pcell, "√ "+anv_Object.CheckBox_Text )
- END IF
- ELSE
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text )
- END IF
- ab_WriteValue =TRUE
- END IF
- ELSE
- IF string(ldb_Value) = anv_Object.CheckBox_On Then
- IF anv_Object.CheckBox_LeftText Then
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text +" √")
- ELSE
- inv_Api.SetValue(pcell, "√ "+anv_Object.CheckBox_Text )
- END IF
- ELSE
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text )
- END IF
- ab_WriteValue =TRUE
- END IF
- ELSE
- IF string(ldb_Value) = anv_Object.CheckBox_On Then
- IF anv_Object.CheckBox_LeftText Then
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text +" √")
- ELSE
- inv_Api.SetValue(pcell, "√ "+anv_Object.CheckBox_Text )
- END IF
- ELSE
- inv_Api.SetValue(pcell, anv_Object.CheckBox_Text )
- END IF
- ab_WriteValue =TRUE
- END IF
- ELSE
- IF anv_Object.IsCheckBox Then
- IF string(ldb_Value)=anv_Object.CheckBox_On Then
- ls_Value=" √ "
- ELSE
- ls_Value=""
- END IF
-
- IF ls_Value<>"" AND IsNull(ls_Value)=False Then
- IF anv_Object.IsSparse AND inv_Requestor.OF_IsDetail_Begin()=False Then
- IF li_LastRow<al_Row Then
- IF anv_Object.PriorRowValue=ldb_Value Then
- ab_SameValue=TRUE
- ELSE
- inv_Api.SetValue(pcell, ls_Value)
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, ls_Value)
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, ls_Value)
- ab_WriteValue =TRUE
- END IF
- END IF
-
- ELSEIF Not IsNull(ldb_Value) Then
- IF anv_Object.IsSparse AND inv_Requestor.OF_IsDetail_Begin()=False Then
- IF li_LastRow<al_Row Then
- IF anv_Object.PriorRowValue=ldb_Value Then
- ab_SameValue=TRUE
- ELSE
- inv_Api.SetValue(pcell, ldb_Value )
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, ldb_Value )
- ab_WriteValue =TRUE
- END IF
- ELSE
- inv_Api.SetValue(pcell, ldb_Value)
- ab_WriteValue =TRUE
- END IF
- END IF
- END IF
-
- IF anv_Object.IsSparse Then
- anv_Object.PriorRowValue =ldb_Value
- END IF
- END IF
- END IF
- IF anv_Object.IsSparse AND ab_WriteValue Then
- anv_Object.LastWriteValueRow = al_Row
- END IF
- end subroutine
- public subroutine of_registcolumninfo_3 ();IF Not IsValid(inv_Requestor) Then
- Return
- END IF
- IF Not IsValid(inv_Layout) Then
- Return
- END IF
-
- Int li, lj
- Int li_Vlines, li_HLines ,li_ObjCount
- Int li_Find
- Long li_x1, li_x2 ,li_Y1, li_Y2,li_Pre_x1 ,li_Next_X1
- Long li_ColSpace, li_RowSpace
- Boolean lb_HasLine ,lb_HasObject
- n_dw2xls_Line lnv_Line
- n_dw2xls_Object lnv_Object
- OF_SortObject_X()
- li_ObjCount = UpperBound(inv_Objects)
- For li=1 To li_ObjCount
- IF inv_Objects[li].ObjType="report" Then
- inv_Layout.OF_RegistObject(inv_Objects[li].X2 ,FALSE)
- Continue
- END IF
-
- IF inv_Objects[li].ObjType="tempobj" Then
- Continue
- END IF
-
- lnv_Object = inv_Objects[li]
- IF IsValid(lnv_Object.inv_LeftLine) AND IsValid(lnv_Object.inv_RightLine) Then
- Continue
- END IF
-
- IF lnv_Object.BorderStyle='2' OR lnv_Object.BorderStyle='4' Then
- Continue
- END IF
-
- IF ( inv_Requestor.OF_GetProcessing()="1" OR inv_Requestor.OF_GetProcessing()="4" ) AND lnv_Object.IsForeGround=False Then
- Continue
- END IF
-
- IF is_Name="detail" OR lnv_Object.NoContaint=False Then
- inv_Layout.OF_AddObject( lnv_Object) //加入需要三次处理的对象
- END IF
-
- //启用以下被屏蔽的代码,会产生比较多的列,但输出的位置更精确
- //IF lnv_Object.Alignment='2' AND lnv_Object.Width>150 Then
- // inv_Layout.OF_RegistObject(lnv_Object.X1)
- // inv_Layout.OF_RegistObject(lnv_Object.X2 )
-
- IF is_Name<>"detail" THEN
- IF lnv_Object.Alignment='1' AND lnv_Object.NoContaint=False THEN
- li_Next_X1=inv_Layout.OF_Get_Next_X1(lnv_Object.x2 -30 )
- IF li_Next_X1<=lnv_Object.X1 AND (lnv_Object.x2 - li_Next_X1 )>100 Then
- inv_Layout.OF_RegistObject(lnv_Object.X2 ,FALSE)
- ELSEIF (li_Next_X1 - lnv_Object.x2)>100 Then //如果跟边线离得不是太远,则不登记了
- inv_Layout.OF_RegistObject(lnv_Object.X2,FALSE )
- END IF
- END IF
- END IF
- Next
- end subroutine
- public function integer of_gety1 (long ai_row);
- IF ai_Row>ids_Rows.RowCount() Then
- ai_Row=ids_Rows.RowCount()
- END IF
- IF ai_Row<=0 Then
- Return 0
- END IF
- RETURN ids_Rows.GetItemNumber(ai_Row,"y1")
- end function
- public function Long of_gety2 (integer ai_row);IF ai_Row>ids_Rows.RowCount() Then
- ai_Row=ids_Rows.RowCount()
- END IF
- IF ai_Row<=0 Then
- Return 0
- END IF
- RETURN ids_Rows.GetItemNumber(ai_Row,"y2")
- end function
- public subroutine of_updatebandheight (readonly long ai_height);IF ib_AutoHeight AND ai_Height> il_BandHeight Then
- il_BandHeight = ai_Height
- END IF
- end subroutine
- public function Long of_getrowheight (integer ai_row);IF ai_Row<0 OR ai_Row>ids_Rows.RowCount() Then
- Return 0
- END IF
- Long li_Height
- li_Height =ids_Rows.GetItemNumber(ai_Row,"y2") - ids_Rows.GetItemNumber(ai_Row,"y1")
- li_Height = ( UnitsToPixels(li_Height,YUnitsToPixels!)+2) *1440 /inv_Layout.ii_LOGPIXELSY
- Return li_Height
- end function
- public function Long of_getbandheight ();Return il_BandHeight
- end function
- public function integer of_getstartrow (long ai_y);Int li_Find
- //IF ai_y=inv_Requestor.of_getheader_beginy() Then
- // ids_Rows.Saveas("c:\11.txt",text!,false)
- //end if
- li_Find = ids_Rows.Find("y1= "+String(ai_y), 1, ids_Rows.RowCount() )
- IF li_Find<=0 Then
- li_Find = ids_Rows.Find("y1<= "+String(ai_y+ii_RowSpace)+" AND y1>= "+String(ai_y - ii_RowSpace),1,ids_Rows.RowCount())
- IF li_Find<=0 Then
- li_Find = ids_Rows.Find("y1> "+String(ai_y + ii_RowSpace),1 , ids_Rows.RowCount() )
- IF li_Find<=0 Then
- li_Find=ids_Rows.Find("y2<"+String(ai_y+ii_RowSpace),ids_Rows.RowCount() ,1)
- IF li_Find<=0 Then
- li_Find= ids_Rows.RowCount()
- ELSE
- li_Find = li_Find +1
- END IF
- ELSE
- li_Find = li_Find -1
- IF li_Find>0 AND li_Find<ids_Rows.RowCount() Then
- IF ids_Rows.GetItemNumber(li_Find,"Y2") > ai_Y Then
- li_Find = li_Find +1
- END IF
- END IF
- END IF
- END IF
- END IF
- IF li_Find<=0 Then
- li_Find =1
- ELSEIF li_Find> ids_Rows.RowCount() Then
- li_Find = ids_Rows.RowCount()
- END IF
- Return li_Find
- end function
- public function integer of_getendrow (long ai_y);Int li_Find
- li_Find = ids_Rows.Find("y2= "+String(ai_y), 1, ids_Rows.RowCount() )
- IF li_Find<=0 Then
- li_Find = ids_Rows.Find("y2<= "+String(ai_y+ii_RowSpace)+" AND y2>= "+String(ai_y - ii_RowSpace),1,ids_Rows.RowCount())
- IF li_Find<=0 Then
- li_Find = ids_Rows.Find("y1> "+String(ai_y +ii_RowSpace), 1, ids_Rows.RowCount() )
- IF li_Find<=0 Then
- li_Find=ids_Rows.Find("y2<"+String(ai_y+ii_RowSpace),ids_Rows.RowCount() ,1)
- IF li_Find<=0 Then
- li_Find= ids_Rows.RowCount()
- ELSE
- li_Find = li_Find +1
- END IF
- ELSE
- li_Find = li_Find -1
- END IF
- END IF
- END IF
- IF li_Find<=0 Then
- li_Find =1
- ELSEIF li_Find> ids_Rows.RowCount() Then
- li_Find = ids_Rows.RowCount()
- END IF
- Return li_Find
- end function
- public function Long getrowheight (integer ai_row);IF ai_Row<0 OR ai_Row>ids_Rows.RowCount() Then
- Return 0
- END IF
- Return ( ids_Rows.GetItemNumber(ai_Row,"y2") - ids_Rows.GetItemNumber(ai_Row,"y1")) *20
- end function
- public function Long of_getbottomspaceheight ();Return il_BottomSpaceHeight
- end function
- protected subroutine of_writerowheight (readonly long al_row, readonly long al_xlsrow);Long li, li_Height
- IF is_Name="detail" AND ids_Rows.RowCount()=1 AND ib_AutoHeight Then
- li_Height =Long( inv_Requestor.OF_Evaluate(al_Row -1 ,"RowHeight()"))
- IF inv_Requestor.OF_GetUnits()='0' Then
- li_Height = UnitsToPixels(li_Height, YUnitsToPixels!)
- ELSEIF inv_Requestor.OF_GetUnits()='2' Then
- li_Height =inv_Api.OF_InchToPixels(li_Height/1000)
- ELSEIF inv_Requestor.OF_GetUnits()='3' Then
- li_Height =inv_Api.OF_CMToPixels(li_Height /1000 )
- END IF
- li_Height =li_Height*1440 /inv_Layout.ii_LOGPIXELSY
- IF li_Height>0 Then
- inv_Api.SetRowHeight(il_hSheet, al_xlsRow+1, li_Height)
- END IF
- ELSE
- For li=1 To ids_Rows.RowCount()
- li_Height = ids_Rows.GetItemNumber(li,"y2") - ids_Rows.GetItemNumber(li,"y1")
- li_Height = ( UnitsToPixels(li_Height,YUnitsToPixels!)+2) *1440 /inv_Layout.ii_LOGPIXELSY
- IF li_Height>0 Then
- inv_Api.SetRowHeight(il_hSheet, al_xlsRow+li, li_Height)
- END IF
- Next
- END IF
- end subroutine
- on n_dw2xls_band.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on n_dw2xls_band.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
- event destructor;Int li
- For li=1 To UpperBound(inv_Objects)
- Destroy inv_Objects[li]
- Next
- For li=1 To UpperBound(inv_VLines)
- Destroy inv_VLines[li]
- Next
- For li=1 To UpperBound(inv_HLines)
- Destroy inv_HLines[li]
- Next
- Destroy ids_Rows
- end event
- event constructor;String ls_Syntax
- ids_Rows = Create DataStore
- ls_Syntax =" release 6 ; "+ &
- " datawindow(units=0 processing=1 ) " + &
- " header(height=0 ) " + &
- " detail(height=0 ) "+ &
- " summary(height=0 ) "+ &
- " table( "+&
- " column=(type=long updatewhereclause=no name=y1 dbname='y1' initial='0' ) " +&
- " column=(type=long updatewhereclause=no name=y2 dbname='y2' initial='0' ) " +&
- " column=(type=long updatewhereclause=no name=textrect_y1 dbname='textrect_y1' initial='0' ) " +&
- " column=(type=long updatewhereclause=no name=textrect_y2 dbname='textrect_y2' initial='0' ) " +&
- " column=(type=long updatewhereclause=no name=topspace dbname='topspace' initial='0' ) " +&
- " column=(type=long updatewhereclause=no name=bottomspace dbname='bottomspace' initial='0' ) " +&
- " column=(type=char(1) updatewhereclause=no name=TopLine dbname='TopLine' initial='0' ) " +&
- " column=(type=char(1) updatewhereclause=no name=BottomLine dbname='BottomLine' initial='0' ) " +&
- " column=(type=long updatewhereclause=no name=OldRowNum dbname='OldRowNum' initial='0' ) " +&
- " column=(type=long updatewhereclause=no name=NewRowNum dbname='NewRowNum' initial='0' ) " +&
- " sort='y1 A, y2 A ' ) "
-
- ids_Rows.Create( ls_Syntax)
- end event
|