package Ġeu . qi ou . aaf 4 k . util . io Ċ Ċ import Ġeu . qi ou . aaf 4 k . report ings . Global Configuration Ċ import Ġeu . qi ou . aaf 4 k . report ings . Global Configuration . DEFAULT _ FONT _ NAME Ċ import Ġeu . qi ou . aaf 4 k . util . strings . times Ċ import Ġorg . apache . poi . h ss f . user model . H SS FF orm ula Evaluator Ċ import Ġorg . apache . poi . h ss f . user model . H SS F Workbook Ċ import Ġorg . apache . poi . h ss f . util . H SS F Color Ċ import Ġorg . apache . poi . ss . user model .* Ċ import Ġorg . apache . poi . ss . util . Cell Util Ċ import Ġorg . apache . poi . x ss f . user model . XSS F CellStyle Ċ import Ġorg . apache . poi . x ss f . user model . XSS F Color Ċ import Ġorg . apache . poi . x ss f . user model . XSS FF orm ula Evaluator Ċ import Ġorg . apache . poi . x ss f . user model . XSS F Workbook Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . text . NumberFormat Ċ import Ġjava . time . LocalDate Ċ import Ġjava . util .* Ċ Ċ object ĠExcel Util Ġ{ ĊĠĠĠ Ġval Ġdigit Regex Ġ= Ġ""" [- .\ d ]+ """. to Regex () ĊĠĠĠ Ġval Ġformat Specifier Ġ= Ġ""" (?: ([ 0 # ]*) |( ?: ([ 0 # ]{ 1 , 3 }) ?( ,( ?: [ 0 # ]{ 3 }) ? )* )) (\ . )? ([ 0 # ]*) """. to Regex () ĊĊĊĠĠĠ Ġ// Ġthe Ġfloat Ġnumbers Ġin Ġthe Ġspreadsheet Ġshould Ġbe Ġformatted , Ġor Ġby Ġdefault Ġin Ġwill Ġbe Ġparsed Ġto ĠInt ĊĠĠĠ Ġfun Ġparse Xl Format String ( s : ĠString ): Ġ( Number ) Ġ-> ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( s Ġ== Ġ" General ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparse Xl Format String ("# ") ĊĊĠĠĠĠĠĠĠ Ġformat Specifier . match Ent ire ( s )?. groups ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠindexOf Sharp Ġ= Ġit . last () !!. value . indexOf First Ġ{ Ġit Ġ== Ġ'#' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecimal Ġ= Ġwith ( it . last () !!. range ) Ġ{ Ġthis . last Ġ- Ġthis . first Ġ+ Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthous and Sep Ġ= Ġit [ 2 ] Ġ!= Ġnull Ġ|| Ġit [ 3 ] Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Decimal Point Ġ= Ġit [ it . size Ġ- Ġ 2 ] Ġ!= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= ĠString . format ("% ${ if Ġ( th ous and Sep ) Ġ"," Ġelse Ġ"" }.${ decimal } f ", Ġit . toDouble ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( indexOf Sharp Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 Ġ+ Ġif Ġ( has Decimal Point Ġ&& Ġdecimal Ġ== Ġ 0 ) Ġ"." Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġwith ( p 1 . take Last ( decimal Ġ- ĠindexOf Sharp )) Ġ{ Ġlength Ġ- Ġ( 1 Ġ+ ĠindexOf Last Ġ{ Ġit 1 Ġ-> Ġit 1 Ġ!= Ġ' 0 ' Ġ}) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 . drop Last ( if Ġ( pos Ġ== Ġdecimal ) Ġpos Ġ+ Ġ 1 Ġelse Ġpos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠException (" Malformed Ġpattern : Ġ\"$ s \" ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġcolumn Ġnumber Ġof Ġthe Ġlast Ġcolumn ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġx ( s ht : ĠSheet , Ġrow : ĠInt Ġ= Ġ 1 ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġs ht . getRow ( row Ġ- Ġ 1 ). last Cell Num . toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġcolumn Ġnumber Ġof Ġthe Ġlast Ġcolumn ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġy ( s ht : ĠSheet , Ġcolumn : ĠInt Ġ= Ġ 1 ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġs ht . last Row Num Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġs ht . getRow ( i ). getCell ( column Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġnull Ġ|| Ġc . cell TypeEnum Ġ== ĠCell Type . BLANK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Workbook ( path : ĠString ): ĠPair < Workbook , ĠFileInputStream > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= ĠFileInputStream ( path ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( if Ġ( path . endsWith (". xls ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH SS F Workbook ( inputStream ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠX SS F Workbook ( inputStream )) Ġto ĠinputStream ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh ( wb : ĠWork book ): ĠWork book Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( wb Ġis ĠH SS F Workbook ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH SS FF orm ula Evaluator . evaluate All Formula Cells ( wb ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠX SS FF orm ula Evaluator . evaluate All Formula Cells ( wb ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Workbook ( stream : ĠFileInputStream , Ġis X ls x : ĠBoolean Ġ= Ġtrue ): ĠPair < Workbook , ĠFileInputStream > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( if Ġ( is X ls x ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠX SS F Workbook ( stream ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH SS F Workbook ( stream )) Ġto Ġstream ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprocess Workbook ( path : ĠString , Ġcallback : Ġ( Workbook ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( wb , ĠinputStream ) Ġ= Ġget Workbook ( path ) ĊĊĠĠĠĠĠĠĠ Ġcallback ( wb ) ĊĠĠĠĠĠĠĠ ĠinputStream . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Work sheet ( path : ĠString , Ġsheet Index : ĠInt Ġ= Ġ 0 , Ġsheet Name : ĠString ? Ġ= Ġnull ): ĠPair < Sheet , ĠFileInputStream > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( wb , ĠinputStream ) Ġ= Ġget Workbook ( path ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( if Ġ( sheet Name Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwb . get Sheet ( sheet Name ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwb . get Sheet At ( sheet Index )) Ġto ĠinputStream ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget First Non Empty Row Num ( s ht : ĠSheet ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġs ht . row Iterator (). as Sequence (). first Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . cell Iterator (). as Sequence (). any Ġ{ Ġcell Ġ-> Ġtext Value ( cell ). isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġ}. row Num ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Col Num ( s ht : ĠSheet ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġs ht . row Iterator (). as Sequence (). reduce Ġ{ Ġacc , Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row . last Cell Num Ġ> Ġacc . last Cell Num ) Ġrow Ġelse Ġacc ĊĠĠĠĠĠĠĠ Ġ}. last Cell Num . toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprocess Work sheet ( path : ĠString , Ġsheet Index : ĠInt Ġ= Ġ 0 , Ġsheet Name : ĠString ? Ġ= Ġnull , Ġcallback : Ġ( Sheet ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġf : Ġ( Workbook ) Ġ-> ĠUnit Ġ= Ġ{ Ġwb Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs ht Ġ= Ġif Ġ( sheet Name Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwb . get Sheet ( sheet Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwb . get Sheet At ( sheet Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( s ht ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprocess Workbook ( path , Ġf ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġloop Through Rows ( path : ĠString , Ġsheet Index : ĠInt Ġ= Ġ 0 , Ġsheet Name : ĠString ? Ġ= Ġnull , Ġcallback : Ġ( Row ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġf : Ġ( Sheet ) Ġ-> ĠUnit Ġ= Ġ{ Ġs ht Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrows Ġ= Ġs ht . row Iterator () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( rows . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġrows . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( row ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprocess Work sheet ( path , Ġsheet Index , Ġsheet Name , Ġf ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfile Exists ( path : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġf Ġ= ĠFile ( path ) ĊĠĠĠĠĠĠĠ Ġreturn Ġf . exists () Ġ&& Ġ! f . isDirectory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Workbook IfNot Exists ( path : ĠString , Ġcallback : Ġ( Workbook ) Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( file Exists ( path )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Workbook ( path , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġworkbook Ġ= Ġif Ġ( path . endsWith (". xls ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH SS F Workbook (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( summary Information Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . create Information Properties () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Information . author Ġ= ĠGlobal Configuration . DEFAULT _ AUTHOR _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX SS F Workbook (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . core Properties . creator Ġ= ĠGlobal Configuration . DEFAULT _ AUTHOR _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( workbook ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Workbook ( path , Ġworkbook ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Workbook ( path : ĠString , Ġworkbook : ĠWork book ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= ĠFileOutputStream ( path ) ĊĠĠĠĠĠĠĠ Ġworkbook . write ( stream ) ĊĊĠĠĠĠĠĠĠ Ġstream . flush () ĊĠĠĠĠĠĠĠ Ġstream . close () ĊĠĠĠĠĠĠĠ Ġworkbook . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexists Work sheet ( wb : ĠWork book , Ġsheet Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 0 Ġuntil Ġwb . numberOf Sheet s ). map Ġ{ Ġwb . get Sheet Name ( it ) Ġ}. any Ġ{ Ġit . equals ( sheet Name ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Work sheet IfNot Exists ( path : ĠString , Ġsheet Name : ĠString Ġ= Ġ" src ", Ġcallback : Ġ( Sheet ) Ġ-> ĠUnit , ĠreadOnly : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( file Exists ( path )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Workbook ( path ) Ġ{ Ġwb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exists Work sheet ( wb , Ġsheet Name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( wb . get Sheet ( sheet Name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( wb . create Sheet ( sheet Name )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! readOnly ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Workbook ( path , Ġwb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf : Ġ( Workbook ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . create Sheet ( sheet Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Workbook IfNot Exists ( path , Ġf ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< K , ĠV > Ġun load ( data : ĠMap < K , ĠV >, Ġoperation : Ġ( String ) Ġ-> ĠK , Ġkey Col : ĠInt , Ġt arg Col : ĠInt , Ġexit Condition : Ġ( Row ) Ġ-> ĠBoolean , Ġprocess Cell : Ġ( Cell , ĠV ) Ġ-> ĠUnit , Ġsheet : ĠSheet ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcallback : Ġ( Sheet ) Ġ-> ĠUnit Ġ= Ġ{ Ġs ht Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrows Ġ= Ġs ht . row Iterator () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( rows . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġrows . next () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exit Condition ( row )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġoperation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Value ( row . getCell ( key Col )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . containsKey ( k )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Cell ( row . getCell ( t arg Col ) Ġ?: Ġrow . create Cell ( t arg Col ), Ġdata . getValue ( k )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcallback ( sheet ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtext Value ( c : ĠCell , Ġtype : ĠCell Type Ġ= Ġc . cell TypeEnum ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Type . BLANK , ĠCell Type . ERROR , ĠCell Type ._ NONE Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Type . NUMERIC Ġ-> Ġparse Xl Format String ( c . cell Style . data Format String )( c . numeric CellValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Type . BOOLEAN Ġ-> Ġc . boolean CellValue . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Type . STRING Ġ-> Ġc . string CellValue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Type . FORM ULA Ġ-> Ġtext Value ( c , Ġc . cached Formula Result TypeEnum ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlong To RGB ( l : ĠLong ): ĠTrip le < Int , ĠInt , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġl Ġ% Ġ 2 5 6 ĊĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġ(( l Ġ- Ġr ) Ġ/ Ġ 2 5 6 ) Ġ% Ġ 2 5 6 ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġ((( l Ġ- Ġr ) Ġ/ Ġ 2 5 6 Ġ- Ġg ) Ġ/ Ġ 2 5 6 ) Ġ% Ġ 2 5 6 ĊĊĠĠĠĠĠĠĠ Ġreturn ĠTrip le ( r . toInt (), Ġg . toInt (), Ġb . toInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠUpdate Ġthe Ġstyle Ġof Ġthe Ġcell Ġin Ġplace ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠUpdate ( private Ġval Ġcell : ĠCell ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġwb Ġ= Ġcell . sheet . workbook ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcreate Helper Ġ= Ġwb . creation Helper ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcolor Index : ĠX SS F Color ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġis XX SF Ġ= Ġwb Ġis ĠX SS F Workbook ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġblack : ĠX SS F Color ? Ġ= Ġif Ġ( is XX SF ) ĠX SS F Color ( byte ArrayOf ( 0 . to Byte (), Ġ 0 . to Byte (), Ġ 0 . to Byte ()), Ġ( wb Ġas ĠX SS F Workbook ). styles Source . indexed Colors ) Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// poi Ġlib - bug Ġ Ġuse Ġcell util Ġwill Ġerase Ġfore / backgroundColor Ġby ĠX SS F - rgb Ġcolor ĊĠĠĠĠĠĠĠ Ġ// https :// bz . apache . org / bugzilla / show _ bug . cgi ? id = 5 9 4 4 2 ĊĠĠĠĠĠĠĠ Ġfun Ġprepare (): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is XX SF ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Index Ġ= Ġ( cell . cell Style Ġas ĠX SS F CellStyle ). fill Foreground XSS F Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrestore (): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is XX SF ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( color Index Ġ!= Ġnull Ġ&& Ġcolor Index Ġ!= Ġblack ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( cell . cell Style Ġas ĠX SS F CellStyle ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Fill ForegroundColor ( color Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstyle ( style : ĠCell Style , Ġdeep Copy : ĠBoolean Ġ= Ġfalse ): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . cell Style Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! deep Copy ) Ġstyle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠStyle Builder ( wb ). from Style ( style ). build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdata Format ( format : ĠString ?): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( format Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCell Util . set CellStyle Property ( cell , ĠCell Util . DATA _ FORMAT , Ġcreate Helper . create Data Format (). get Format ( format )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġnumber Format ( pos After Decimal : ĠInt ? Ġ= Ġ 2 , Ġthous and Sep : ĠBoolean Ġ= Ġtrue ): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pos After Decimal Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdata Format (( if Ġ( th ous and Sep ) Ġ"# , ## 0 ." Ġelse Ġ" 0 .") Ġ+ Ġ" 0 " Ġ* Ġpos After Decimal ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfont ( name : ĠString Ġ= ĠDEFAULT _ FONT _ NAME , Ġsize : ĠShort Ġ= Ġ 1 1 , Ġcolor : ĠShort Ġ= ĠIndexed Colors . BLACK . index , Ġbold : ĠBoolean Ġ= Ġfalse , Ġitalic : ĠBoolean Ġ= Ġfalse , Ġstrike out : ĠBoolean Ġ= Ġfalse , Ġunderline : ĠByte Ġ= Ġ 0 ): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Util . setFont ( cell , Ġwb . create Font (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . font Name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . bold Ġ= Ġbold ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . italic Ġ= Ġitalic ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . strike out Ġ= Ġstrike out ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . underline Ġ= Ġunderline ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . font Height In Points Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfill ( color : ĠShort ? Ġ= ĠIndexed Colors . WHITE . index , Ġstyle : ĠFill Pattern Type ? Ġ= ĠFill Pattern Type . SOLID _ FO REG ROUND ): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCell Util . set CellStyle Property ( cell , ĠCell Util . FILL _ FO REG ROUND _ COLOR , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCell Util . set CellStyle Property ( cell , ĠCell Util . FILL _ PATTERN , Ġstyle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfill RGB ( rgb : ĠTrip le < Int , ĠInt , ĠInt >, Ġstyle : ĠFill Pattern Type ? Ġ= ĠFill Pattern Type . SOLID _ FO REG ROUND ): ĠUpdate Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( wb Ġis ĠH SS F Workbook ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwb . custom Palette . setColor AtIndex ( Style Builder . get ( rgb ), Ġrgb . first . to Byte (), Ġrgb . second . to Byte (), Ġrgb . third . to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfill ( Style Builder . get ( rgb ), Ġstyle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( cell . cell Style Ġas ĠX SS F CellStyle ). setFill ForegroundColor ( XSS F Color ( byte ArrayOf ( rgb . first . to Byte (), Ġrgb . second . to Byte (), Ġrgb . third . to Byte ()), Ġ( wb Ġas ĠX SS F Workbook ). styles Source . indexed Colors )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . cell Style . setFill Pattern ( style ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfill Long ( l : ĠLong , Ġstyle : ĠFill Pattern Type ? Ġ= ĠFill Pattern Type . SOLID _ FO REG ROUND ): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfill RGB ( long To RGB ( l ), Ġstyle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġborder Style ( up : ĠBorder Style ? Ġ= Ġnull , Ġright : ĠBorder Style ? Ġ= Ġnull , Ġdown : ĠBorder Style ? Ġ= Ġnull , Ġleft : ĠBorder Style ? Ġ= Ġnull ): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( up Ġ!= Ġnull ) ĠCell Util . set CellStyle Property ( cell , ĠCell Util . BORDER _ TOP , Ġup ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( right Ġ!= Ġnull ) ĠCell Util . set CellStyle Property ( cell , ĠCell Util . BORDER _ RIGHT , Ġright ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( down Ġ!= Ġnull ) ĠCell Util . set CellStyle Property ( cell , ĠCell Util . BORDER _ BOTTOM , Ġdown ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Ġ!= Ġnull ) ĠCell Util . set CellStyle Property ( cell , ĠCell Util . BORDER _ LEFT , Ġleft ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠborderColor ( up : ĠShort ? Ġ= Ġnull , Ġright : ĠShort ? Ġ= Ġnull , Ġdown : ĠShort ? Ġ= Ġnull , Ġleft : ĠShort ? Ġ= Ġnull ): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( up Ġ!= Ġnull ) ĠCell Util . set CellStyle Property ( cell , ĠCell Util . TOP _ BORDER _ COLOR , Ġup ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( right Ġ!= Ġnull ) ĠCell Util . set CellStyle Property ( cell , ĠCell Util . RIGHT _ BORDER _ COLOR , Ġright ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( down Ġ!= Ġnull ) ĠCell Util . set CellStyle Property ( cell , ĠCell Util . BOTTOM _ BORDER _ COLOR , Ġdown ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Ġ!= Ġnull ) ĠCell Util . set CellStyle Property ( cell , ĠCell Util . LEFT _ BORDER _ COLOR , Ġleft ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġalignment ( horizontal : ĠHorizontal Alignment ? Ġ= Ġnull , Ġvertical : ĠVertical Alignment ? Ġ= Ġnull ): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( horizontal Ġ!= Ġnull ) ĠCell Util . set CellStyle Property ( cell , ĠCell Util . ALIGNMENT , Ġhorizontal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( vertical Ġ!= Ġnull ) ĠCell Util . set CellStyle Property ( cell , ĠCell Util . VERTICAL _ ALIGNMENT , Ġvertical ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġindent ( level : ĠInt ? Ġ= Ġnull ): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( level Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCell Util . set CellStyle Property ( cell , ĠCell Util . IND ENT ION , Ġlevel . to Short ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġvalue ( value : ĠAny ?): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset CellValue ( this . cell , Ġvalue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġformula ( formula : ĠString ?): ĠUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( formula Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . cell . cell Formula Ġ= Ġwith ( formula . trim ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . startsWith (" =" )) Ġthis . substring ( 1 ) Ġelse Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠData Format ( val Ġformat : ĠString , Ġval Ġstring Format : Ġ( Any ) Ġ-> ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDATE (" mm m Ġdd , Ġy yyy ", Ġ{ String . format ("% tb Ġ% td , Ġ% t Y ", Ġit )} Ġ), ĊĠĠĠĠĠĠĠ ĠNUMBER ("# , ## 0 . 0 0 ", Ġ{ String . format ("% ,. 2 f ", Ġit )} ), ĊĠĠĠĠĠĠĠ ĠBOOLEAN ("# ", Ġ{ String . format ("% b ", Ġit )} ), ĊĠĠĠĠĠĠĠ ĠINT ("# .# ", Ġ{ String . format ("% ,. 0 f ", Ġit )} ), ĊĠĠĠĠĠĠĠ ĠDEFAULT ("# ", Ġ{ String . format ("% s ", Ġit )} ), ĊĠĠĠĠĠĠĠ ĠSTRING ("# ", Ġ{ String . format ("% s ", Ġit )} ), ĊĠĠĠĠĠĠĠ ĠPER CENT AGE _ NUMBER (" 0 . 0 0 %", Ġ{ ĠNumber Format . get Percent Instance (). apply Ġ{ Ġminimum Fraction Digits Ġ= Ġ 2 Ġ}. format ( it ) Ġ}), ĊĠĠĠĠĠĠĠ ĠPER CENT AGE (" 0 %", Ġ{ ĠNumber Format . get Percent Instance (). apply Ġ{ Ġminimum Fraction Digits Ġ= Ġ 0 Ġ}. format ( it ) Ġ}); ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġof ( name : ĠString ): Data Format { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠData Format . values (). first OrNull Ġ{ Ġit . name Ġ== Ġname Ġ} Ġ?: Ġthrow Ġjava . lang . Exception (" Unknown ĠName : Ġ$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// due Ġto Ġthe Ġlimitation Ġof ĠH SS F , Ġfont Ġshould Ġbe Ġpossibly Ġre - used ĊĠĠĠ Ġ// if Ġdefault Font Ġis Ġset , Ġit Ġwill Ġbe Ġapplied Ġwithout Ġcreating Ġa Ġnew Ġinstance ĊĠĠĠ Ġclass ĠStyle Builder ( private Ġval Ġwb : ĠWork book ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcreate Helper Ġ= Ġwb . creation Helper ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcell Style Ġ= Ġwb . create CellStyle () ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġmult il ines : ĠInt Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom Style ( style : ĠCell Style , Ġfont DeepCopy : ĠBoolean Ġ= Ġtrue ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfont Ġ= Ġwb . getFont At ( style . font Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell Style Ġ= Ġwith ( Style Builder ( wb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alignment ( style . alignment Enum , Ġstyle . vertical Alignment Enum ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. border Style ( style . border Top Enum , Ġstyle . border Right Enum , Ġstyle . border Bottom Enum , Ġstyle . border Left Enum ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. border Color ( style . top BorderColor , Ġstyle . right BorderColor , Ġstyle . bottom BorderColor , Ġstyle . left BorderColor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. data Format ( format Ġ= Ġstyle . data Format String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. indent ( level Ġ= Ġstyle . ind ention . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. multi Line In Cell ( style . wrap Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( wb Ġis ĠH SS F Workbook ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fill ( color Ġ= Ġstyle . fill ForegroundColor , Ġstyle Ġ= Ġstyle . fill Pattern Enum ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fill Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( style Ġas ĠX SS F CellStyle ). fill Foreground XSS F Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġstyle Ġ= Ġstyle . fill Pattern Enum ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! font DeepCopy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . font Obj ( font ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . font ( name Ġ= Ġfont . font Name , Ġsize Ġ= Ġfont . font Height In Points , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġfont . color , Ġbold Ġ= Ġfont . bold , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitalic Ġ= Ġfont . italic , Ġstrike out Ġ= Ġfont . strike out , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunderline Ġ= Ġfont . underline ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdata Format ( format : ĠString ?): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( format Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Style . data Format Ġ= Ġcreate Helper . create Data Format (). get Format ( format ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdata Format ( format : ĠData Format ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . data Format ( format . format ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfont ( name : ĠString Ġ= ĠDEFAULT _ FONT _ NAME , Ġsize : ĠShort Ġ= Ġ 1 1 , Ġcolor : ĠShort Ġ= ĠIndexed Colors . BLACK . index , Ġbold : ĠBoolean Ġ= Ġfalse , Ġitalic : ĠBoolean Ġ= Ġfalse , Ġstrike out : ĠBoolean Ġ= Ġfalse , Ġunderline : ĠByte Ġ= Ġ 0 ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell Style . setFont ( build Font ( name , Ġsize , Ġcolor , Ġbold , Ġitalic , Ġstrike out , Ġunderline )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfont Obj ( f : ĠFont ? Ġ= Ġnull ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Style . setFont ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild Font ( name : ĠString Ġ= ĠDEFAULT _ FONT _ NAME , Ġsize : ĠShort Ġ= Ġ 1 1 , Ġcolor : ĠShort Ġ= ĠIndexed Colors . BLACK . index , Ġbold : ĠBoolean Ġ= Ġfalse , Ġitalic : ĠBoolean Ġ= Ġfalse , Ġstrike out : ĠBoolean Ġ= Ġfalse , Ġunderline : ĠByte Ġ= Ġ 0 ): ĠFont Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwb . create Font (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . font Name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . bold Ġ= Ġbold ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . italic Ġ= Ġitalic ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . strike out Ġ= Ġstrike out ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . underline Ġ= Ġunderline ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . font Height In Points Ġ= Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild Font From ( f : ĠFont , Ġname : ĠString ? Ġ= Ġnull , Ġsize : ĠShort ? Ġ= Ġnull , Ġcolor : ĠShort ? Ġ= Ġnull , Ġbold : ĠBoolean ? Ġ= Ġnull , Ġitalic : ĠBoolean ? Ġ= Ġnull , Ġstrike out : ĠBoolean ? Ġ= Ġnull , Ġunderline : ĠByte ? Ġ= Ġnull ): ĠFont Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild Font ( name Ġ= Ġname Ġ?: Ġf . font Name , Ġsize Ġ= Ġsize Ġ?: Ġf . font Height In Points , Ġcolor Ġ= Ġcolor Ġ?: Ġf . color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbold Ġ= Ġbold Ġ?: Ġf . bold , Ġitalic Ġ= Ġitalic Ġ?: Ġf . italic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrike out Ġ= Ġstrike out Ġ?: Ġf . strike out , Ġunderline Ġ= Ġunderline Ġ?: Ġf . underline ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild Font From ( style : ĠCell Style , Ġname : ĠString ? Ġ= Ġnull , Ġsize : ĠShort ? Ġ= Ġnull , Ġcolor : ĠShort ? Ġ= Ġnull , Ġbold : ĠBoolean ? Ġ= Ġnull , Ġitalic : ĠBoolean ? Ġ= Ġnull , Ġstrike out : ĠBoolean ? Ġ= Ġnull , Ġunderline : ĠByte ? Ġ= Ġnull ): ĠFont Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf Ġ= Ġwb . getFont At ( style . font Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild Font From ( f , Ġname , Ġsize , Ġcolor , Ġbold , Ġitalic , Ġstrike out , Ġunderline ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġindent ( level : ĠInt ? Ġ= Ġ 0 ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( level Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Style . ind ention Ġ= Ġlevel . to Short () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfill ( color : ĠShort Ġ= ĠIndexed Colors . WHITE . index , Ġstyle : ĠFill Pattern Type Ġ= ĠFill Pattern Type . SOLID _ FO REG ROUND ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell Style . fill ForegroundColor Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell Style . setFill Pattern ( style ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfill ( l : ĠLong , Ġstyle : ĠFill Pattern Type Ġ= ĠFill Pattern Type . SOLID _ FO REG ROUND ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfill RGB ( long To RGB ( l ), Ġstyle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfill RGB ( rgb : ĠTrip le < Int , ĠInt , ĠInt >, Ġstyle : ĠFill Pattern Type Ġ= ĠFill Pattern Type . SOLID _ FO REG ROUND ): ĠStyle Builder Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( wb Ġis ĠH SS F Workbook ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwb . custom Palette . setColor AtIndex ( get ( rgb ), Ġrgb . first . to Byte (), Ġrgb . second . to Byte (), Ġrgb . third . to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfill ( get ( rgb ), Ġstyle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// return Ġfill ( wb . custom Palette . find Similar Color ( rgb . first , Ġrgb . second , Ġrgb . third ). index , Ġstyle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( cell Style Ġas ĠX SS F CellStyle ). setFill ForegroundColor ( XSS F Color ( byte ArrayOf ( rgb . first . to Byte (), Ġrgb . second . to Byte (), Ġrgb . third . to Byte ()), Ġ( wb Ġas ĠX SS F Workbook ). styles Source . indexed Colors )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell Style . setFill Pattern ( style ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfill Long ( l : ĠLong , Ġstyle : ĠFill Pattern Type Ġ= ĠFill Pattern Type . SOLID _ FO REG ROUND ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfill RGB ( long To RGB ( l ), Ġstyle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfill Color ( color : ĠX SS F Color ?, Ġstyle : ĠFill Pattern Type ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( cell Style Ġas ĠX SS F CellStyle ). setFill ForegroundColor ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Style . setFill Pattern ( style ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġborder Style ( up : ĠBorder Style ? Ġ= Ġnull , Ġright : ĠBorder Style ? Ġ= Ġnull , Ġdown : ĠBorder Style ? Ġ= Ġnull , Ġleft : ĠBorder Style ? Ġ= Ġnull ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( up Ġ!= Ġnull ) Ġcell Style . setBorder Top ( up ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( right Ġ!= Ġnull ) Ġcell Style . setBorder Right ( right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( down Ġ!= Ġnull ) Ġcell Style . setBorder Bottom ( down ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Ġ!= Ġnull ) Ġcell Style . setBorder Left ( left ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠborderColor ( up : ĠShort ? Ġ= Ġnull , Ġright : ĠShort ? Ġ= Ġnull , Ġdown : ĠShort ? Ġ= Ġnull , Ġleft : ĠShort ? Ġ= Ġnull ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( up Ġ!= Ġnull ) Ġcell Style . top BorderColor Ġ= Ġup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( right Ġ!= Ġnull ) Ġcell Style . right BorderColor Ġ= Ġright ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( down Ġ!= Ġnull ) Ġcell Style . bottom BorderColor Ġ= Ġdown ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Ġ!= Ġnull ) Ġcell Style . left BorderColor Ġ= Ġleft ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġalignment ( horizontal : ĠHorizontal Alignment ? Ġ= Ġnull , Ġvertical : ĠVertical Alignment ? Ġ= Ġnull ): ĠStyle Builder Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( horizontal Ġ!= Ġnull ) Ġcell Style . set Alignment ( horizontal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( vertical Ġ!= Ġnull ) Ġcell Style . set Vertical Alignment ( vertical ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġmulti Line In Cell ( mult iline : ĠBoolean , Ġlines : ĠInt Ġ= Ġ 2 ): ĠStyle Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell Style . wrap Text Ġ= Ġmultiline ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmult il ines Ġ= Ġif Ġ( mult iline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠCell Style Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcell Style ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġapply To ( cell : ĠCell ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . cell Style Ġ= Ġthis . cell Style ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . row . height In Points Ġ= Ġcell . row . sheet . default Row Height In Points Ġ* Ġthis . mult il ines ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġapply To ( cells : ĠIterable < Cell >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcells . forEach Ġ{ Ġapply To ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfacilitate Ġthe Ġrgb - color Ġsetting Ġin Ġx ls ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġreplace able H SS F Colors Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH SS F Color . OL IVE _ GREEN . index , ĠH SS F Color . GREEN . index , ĠH SS F Color . BR IGHT _ GREEN . index , ĠH SS F Color . SE A _ GREEN . index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġlast Index Ġ= Ġreplace able H SS F Colors . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Ġ= Ġmutable Map Of < Triple < Int , ĠInt , ĠInt >, ĠShort >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġget ( rgb : ĠTrip le < Int , ĠInt , ĠInt >): ĠShort Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m . containsKey ( rgb )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm [ rgb ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġlast Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" All Ġthe Ġreplace able Ġslots Ġare Ġtaken !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm [ rgb ] Ġ= Ġreplace able H SS F Colors [ index ++] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget ( rgb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset CellValue ( cell : ĠCell , Ġvalue : ĠAny ) Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . setCellValue ( value . toDouble ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠDouble Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . setCellValue ( value . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . set Cell Type ( Cell Type . NUMERIC ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠBoolean Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . setCellValue ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . set Cell Type ( Cell Type . BOOLEAN ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠDate Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . setCellValue ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . set Cell Type ( Cell Type . NUMERIC ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠCalendar Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . setCellValue ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . set Cell Type ( Cell Type . NUMERIC ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠLocalDate Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . setCellValue ( java . sql . Date . valueOf ( value )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . set Cell Type ( Cell Type . NUMERIC ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . setCellValue ( value . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . set Cell Type ( Cell Type . STRING ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġwrite Data ( path : ĠString , Ġsheet Name : ĠString Ġ= Ġ" src ", Ġdata : ĠMap < *, Ġ* >, Ġstart Row : ĠInt Ġ= Ġ 0 , Ġstart Col : ĠInt Ġ= Ġ 0 , Ġheader : ĠIterable < String >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf : Ġ( Sheet ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr Ġ= Ġstart Row Ġ+ Ġif Ġ( header Ġ== Ġnull ) Ġ 0 Ġelse Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader ?. let Ġ{ Ġh Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc Ġ= Ġstart Col ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġit . create Row ( start Row ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh . forEach Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset CellValue ( row . create Cell ( c ++ ), Ġx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . forEach Ġ{ Ġ( t , Ġu ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġit . create Row ( r ++) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc Ġ= Ġstart Col Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset CellValue ( row . create Cell ( start Col ), Ġt . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( u Ġis ĠIterable <* >) Ġu . forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset CellValue ( row . create Cell ( c ++ ), Ġi !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġset CellValue ( row . create Cell ( c ), Ġu !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Work sheet IfNot Exists ( path , Ġsheet Name , Ġf ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ