Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PHPExcel Documentation de Desarrollo
PHPExcel Documentation de Desarrollo
1.
Contents
1. CONTENTS........................................................................................................................................................2 2. REQUISITOS PREVIOS..................................................................................................................................5 PUEDE ELIMINAR ESTA DEPENDENCIA PARA ESCRIBIR EXCEL2007 ARCHIVOS (NO PARA LEER) MEDIANTE EL USO DE LA PCLZIP QUE SE INCLUYE CON PHPEXCEL. SEE THE FAQ SECTION OF THIS DOCUMENT ( 2.4.2 ) FOR DETAILS ABOUT THIS. VEA LA SECCIN DE PRE UNTAS FRECUENTES DE ESTE DOCUMENTO ( 2.4.2 ) PARA M!S DETALLES SOBRE ESTO. PCLZIP DOES HAVE A DEPENDENCY ON PHP"S ZLIB EXTENSION BEIN ENABLED. PCLZIP TIENE UNA DEPENDENCIA EN ZLIB EXTENSIN PHP EST! HABILITANDO.............................................................................................................................# 2.$. LAS INSTRUCCIONES DE INSTALACIN.....................................................................................................................# 2.2. PRIMEROS PASOS.................................................................................................................................................# 2.%. ENLACES &TILES Y HERRAMIENTAS.........................................................................................................................' 2.3.1. OpenXML / SpreadsheetML....................................................................................................................6 2.3.2. Preguntas ms frecuentes.......................................................................................................................6 2.3.3. Tutoria es................................................................................................................................................!
BIBLIOTECA
3. ARQUITECTURA...........................................................................................................................................10 %.$. ESQUEM!TICA..................................................................................................................................................$0 %.2. LAZY LOADER..................................................................................................................................................$0 %.%. SPREADSHEET(HO(A DE CALCULO) EN MEMORIA...................................................................................................$0 %.4. ESCRITURA Y LECTURA......................................................................................................................................$$ %.#. FLUIDO INTERFACES...........................................................................................................................................$2 4. CREACIN DE UNA SPREADSHEET(HOJA DE CALCULO)..............................................................14 4.$. LA CLASE PHPEXCEL.......................................................................................................................................$4 4.2. OPCIONES DE CONFI URACIN.............................................................................................................................$4 ".2.1. # a macenamiento en cach$ de una ce da...........................................................................................1" ".2.2. %dioma / &onfiguraci'n regiona ..........................................................................................................16 4.%. ELIMINACIN DE UN LIBRO DE LA MEMORIA..........................................................................................................$7 4.4. )OR*SHEETS...................................................................................................................................................$7 4.#. ACCESSIN CELLS.............................................................................................................................................$7 ".(.1. # esta) ecimiento de un *a or de a ce da por coordenada................................................................1+ ".(.2. ,ecuperaci'n de una ce da de coordenadas........................................................................................1+ ".(.3. # esta) ecimiento de un *a or de ce da de a co umna - a fi a..........................................................1+ ".(.". ,ecuperaci'n de una ce da por co umna - fi a....................................................................................1. ".(.(. Looping ce das......................................................................................................................................1. ".(.6. /so de carpetas *a or para faci itar a entrada de datos.....................................................................1! 4.'. PHPEXCEL RECETAS.........................................................................................................................................20 ".6.1. Marco de ho0a de c cu o de os metadatos de un................................................................................21 ".6.2. Marco acti*a de ho0a de una ho0a de c cu o.......................................................................................21 ".6.3. #scri)e una fecha en una ce da............................................................................................................21 ".6.". #scri)ir una f'rmu a en una ce da.......................................................................................................22 ".6.(. &onfiguraci'n regiona para os preparados en..................................................................................22 ".6.6. #scri)a un carcter de nue*a 2nea 34 n3 en una ce da 56 t 7 #nter8..................................................23 ".6.+. #sta) e9ca e:p 2citamente tipo de datos de una ce da..........................................................................2" ".6... &am)iar una ce da en una direcci'n /,L hacer c ic en......................................................................2" ".6.!. Marco orientaci'n de a pgina una ho0a de c cu o - e tama;o.......................................................2" ".6.11. &onfigurar pgina< #sca a de opciones.............................................................................................2" ".6.11. Pgina de mrgenes............................................................................................................................2( ".6.12. &entro de una pgina hori9onta / *ertica .........................................................................................26 ".6.13. 60uste de a ca)ecera - pie de pgina de impresi'n de una ho0a de c cu o.....................................26 ".6.1". Marco rompe a impresi'n en una fi a o co umna..............................................................................2. ".6.1(. Mostrar u ocu tar 2neas de di*isi'n de impresi'n cuando................................................................2. ".6.16. Marco fi as / co umnas a repetir en a parte superior / i9=uierda......................................................2! ".6.1+. #specificar e rea de impresi'n........................................................................................................2! ".6.1.. >ormato de ce das...............................................................................................................................2! ".6.1!. ?@mero de formatos............................................................................................................................31 ".6.21. 6 ineaci'n - a0ustar e te:to...............................................................................................................31
".6.21. &onfiguraci'n de esti o predeterminado de un i)ro.........................................................................32 ".6.22. #sti o )ordes de a ce da.....................................................................................................................32 ".6.23. >ormato condiciona en una ce da.....................................................................................................33 ".6.2". 6;ade un comentario a una ce da......................................................................................................3" ".6.2(. 6p icar autofi tro a un rango de ce das..............................................................................................3" ".6.26. Aefinici'n de a seguridad en una ho0a de c cu o............................................................................3" ".6.2+. Marco de *a idaci'n de datos en una ce da.......................................................................................3( ".6.2.. Marco co umna de ancho de una.......................................................................................................36 ".6.2!. Mostrar u ocu tar una co umna..........................................................................................................3+ ".6.31. Brupo / es=uema de una co umna......................................................................................................3+ ".6.31. Marco fi a a a tura de un...................................................................................................................3+ ".6.32. Mostrar u ocu tar una fi a...................................................................................................................3+ ".6.33. Brupo / es)o9ar una fi a.....................................................................................................................3+ ".6.3". &om)inar / unmerge ce das................................................................................................................3. ".6.3(. %nserci'n de fi as / co umnas..............................................................................................................3. ".6.36. 6gregar un di)u0o a una ho0a de c cu o...........................................................................................3. ".6.3+. 6;adir te:to enri=uecido a una ce da.................................................................................................3! ".6.3.. Aefinir un rango con nom)re.............................................................................................................3! ".6.3!. ,edirigir a sa ida a a Ce) de na*egador de un c iente..................................................................."1 ".6."1. 60uste de ancho de co umna predeterminado...................................................................................."1 ".6."1. 60uste de a a tura de a fi a por defecto............................................................................................."1 ".6."2. 6gregar un di)u0o a una ho0a de BA................................................................................................."1 ".6."3. Marco ho0a de c cu o e ni*e de 9oom............................................................................................."1 ".6."". Do0a de co or de ficha........................................................................................................................."2 ".6."(. &rear ho0as de c cu o en un i)ro....................................................................................................."2 ".6."6. Ocu tos ho0as de c cu o 5ho0a de estados8........................................................................................"2 ".6."+. 6 i9=uierda ho0a de Aerecho.............................................................................................................."2 5. REALIZACIN DE CLCULOS DE LA FR ULA...............................................................................43 #.$. USANDO EL MOTOR DE C!LCULO PHPEXCEL........................................................................................................4% #.2. LIMITACIONES CONOCIDAS..................................................................................................................................44 (.2.1. Precedencia de Operadores.................................................................................................................."" (.2.2. Las f'rmu as =ue se usan n@meros - te:to............................................................................................"" !. LECTURA " ESCRITURA DE ARCHIVOS...............................................................................................45 '.$. PHPEXCEL+IOFACTORY..................................................................................................................................4# 6.1.1. &rear PDP#:ce E,eaderE%,eader uti i9ando PDP#:ce E%O>actor-................................................."( 6.1.2. &rear PDP#:ce EFriterE%Friter uti i9ando PDP#:ce E%O>actor-...................................................."6 '.2. EXCEL 2007 (SPREADSHEETML) FORMATO DE ARCHIVO.......................................................................................4' 6.2.1. PDP#:ce E,eaderE#:ce 211+............................................................................................................."6 6.2.2. PDP#:ce EFriterE#:ce 211+..............................................................................................................."+ '.%. EXCEL # (BIFF) FORMATO DE ARCHIVO..............................................................................................................47 6.3.1. PDP#:ce E,eaderE#:ce (...................................................................................................................". 6.3.2. PDP#:ce EFriterE#:ce (....................................................................................................................."! '.4. EXCEL 200% FORMATO DE ARCHIVO XML.........................................................................................................4, 6.".1. PDP#:ce E,eaderE#:ce 2113XML....................................................................................................."! '.#. ENLACE SIMBLICO (SYL*).............................................................................................................................#0 6.(.1. PDP#:ce E,eaderESGLH.....................................................................................................................(1 '.'. CSV (VALORES SEPARADOS POR COMAS).............................................................................................................#0 6.6.1. PDP#:ce E,eaderE&SI.......................................................................................................................(1 6.6.2. PDP#:ce EFriterE&SI .......................................................................................................................(2 '.7. HTML...........................................................................................................................................................#% 6.+.1. PDP#:ce EFriterEDTML ....................................................................................................................(3 '.-. PDF...............................................................................................................................................................## 6...1. PDP#:ce EFriterEPA> .......................................................................................................................(( '.,. ENERACIN DE ARCHIVOS DE EXCEL A PARTIR DE PLANTILLAS (LEER. MODIFICAR Y ESCRIBIR)....................................#' #. CR$DITOS.......................................................................................................................................................5# APPENDI% A& CLAVES VLIDAS DE ATRIZ DE APPL"FRO ARRA" PARA ESTILO () ..........5'
2.
Requisitos previos
Requisitos de software
El si uiente so!tware es necesario para "esarrollar con PHPExcel# PHP version $.2.0 or newer PHP versi%n $.2.0 o posterior PHP extension p&p'(ip ena)le" *+ extensi%n p&p'(ip &a)ilita"as con PHP *+ PHP extension p&p'xml ena)le" PHP p&p'xml extensi%n &a)ilita"o PHP extension p&p' "2 ena)le" ,i! not compile" in+ extensi%n "e PHP p&p' "2 &a)ilita"o ,si no se compilan en+
*) Php_zip s%lo es necesario por PHPExcel_Reader_Excel2007 PHPExcel_!riter_Excel2007 PHPExcel_Reader_""#alc$ .n ot&er wor"s/ i! -ou nee" PHPExcel to &an"le .xlsx or .o"s !iles -ou will nee" t&e (ip extension/ )ut ot&erwise not. En otras pala)ras/ si uste" necesita PHPExcel "e mane0ar. 1lsx o arc&ivos. 2"s ten"r3 la extensi%n (ip/ pero no lo contrario. Pue"e eliminar esta "epen"encia para escri)ir excel2007 arc&ivos ,no para leer+ me"iante el uso "e la )i)lioteca P456ip 7ue se inclu-e con PHPExcel. See the FAQ section of this document ( 2.4.2 ) for details about this. 8ea la secci%n "e pre untas !recuentes "e este "ocumento , 2.4.2 + para m3s "etalles so)re esto. PCLZip does ha e a dependenc! on P"P#s $lib e%tension bein& enabled. P456ip tiene una "epen"encia en (li) extensi%n PHP est3 &a)ilitan"o.
2.1.
5a instalaci%n es mu- !3cil# copiar el conteni"o "e la carpeta "e las clases a cual7uier lu ar in -our application re7uire". en su aplicaci%n re7uiere.
Ejemplo: 9i su "irectorio we) ra:( es ; var ; www ; es posi)le 7ue "esee crear una su)carpeta llama"a ; var ; www ; clases ; - copiar los arc&ivos en esa carpeta por lo 7ue terminan con los arc&ivos#
2.2.
Primeros pasos
<na )uena manera "e empe(ar es e0ecutar al unas "e las prue)as inclui"as en la "escar a.
4opie el =Prue)as= carpeta al la"o "e su =4lases= carpeta "es"e arri)a por lo 7ue terminan con#
Empiece a correr las prue)as/ se?alan"o su nave a"or para 7ue los scripts "e prue)a#
2.3.
Ha- al unos enlaces - &erramientas 7ue son mu- Atiles cuan"o se "esarrolla utili(an"o PHPExcel. Please re!er to t&e PHPExcel 4o"ePlex pa es !or an up"ate version o! t&e list )elow. Por !avor/ consulte la p3 ina "e 4o"ePlex PHPExcel para una versi%n "e actuali(aci%n "e la lista a continuaci%n.
2.3.1.
OpenXML / preads!eetML
Archi%o de docu&entaci'n en (or&ato &ttp#;;www.ecmaBinternational.or ;news;>44$'current'worC;>44$'availa)le'"ocs.&tm &ttp#;;www.ecmaBinternational.or ;news;>44$'current'worC;>44$'availa)le'"ocs.&tm "pen)*+ Explained e,-oo. "pen)*+ Explicaci'n de e,li-ro &ttp#;;openxml"eveloper.or ;articles;1D70.aspx &ttp#;;openxml"eveloper.or ;articles;1D70.aspx *icroso(t "((ice #o&pati-ilit/ Pac. (or !ord Excel and Po0erPoint 2007 1ile 1or&ats Pa2uete de co&pati-ilidad de *icroso(t "((ice para !ord Excel / Po0erPoint 2007 1or&atos de archi%o &ttp#;;www.microso!t.com;"ownloa"s;"etails.aspxE!amil-i"FD41)3470B3aeDB4aeeBG!43B cH))74c"14HHI"ispla-lan Fen &ttp#;;www.microso!t.com;"ownloa"s;"etails.aspxE !amil-i"FD41)3470B3aeDB4aeeBG!43BcH))74c"14HHI"ispla-lan Fen "pen)*+ Pac.a3e Explorer "pen)*+ Explorador de pa2uetes &ttp#;;www.co"eplex.com;PacCa eExplorer; &ttp#;;www.co"eplex.com;PacCa eExplorer;
2.3.2.
Preguntas ms recuentes
PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP);
antes "e llamar al mKto"o save "el Escritor excel2007. Pue"e volver a usar 6ipArc&ive llaman"o al#
PHPExcel_Settings::setZipClass(PHPExcel_Settings::ZIPARCHIVE);
En la actuali"a"/ esto s%lo le permite escri)ir excel2007 arc&ivos sin la necesi"a" "e 6ipArc&ive ,no leer excel2007 o 224alc+
Error %atal0 tama1o de la memoria dom2sticos de xxx $#tes a,otado 3tratado de asi,nar $#tes ###4 en 555 aaa en l6nea
PHPExcel tiene una =memoria= representaci%n "e una &o0a "e c3lculo/ por lo 7ue es suscepti)le "e limitaciones "e memoria "e PHP. >&e memor- ma"e availa)le to PHP can )e increase" )- e"itin t&e value o! t&e memor-limit "irective in -our p&p.ini !ile/ or )- usin iniset,Mmemor-'limitM/ M12GMM+ wit&in -our co"e ,.9P permittin +. 5a memoria "isponi)le para PHP pue"e ser aumenta"a me"iante la mo"i!icaci%n "el valor "e la "irectiva memor-5imit en su arc&ivo p&p.ini/ o utili(an"o iniset ,Mmemor-'limitM/ M12GM M+ "entro "e su c%"i o ,.9P lo permite+. Al unos lectores - escritores son m3s r3pi"os 7ue otros/ - 7ue tam)iKn utili(an "i!erentes canti"a"es "e memoria. Nou can !in" some in"ication o! t&e relative per!ormance an" memorusa e !or t&e "i!!erent Oea"ers an" Lriters/ over t&e "i!!erent versions o! PHPExcel/ on t&e "iscussion )oar" . <ste" pue"e encontrar al unas in"icaciones so)re el ren"imiento relativo - el uso "e memoria para los "i!erentes lectores - escritores/ so)re las "i!erentes versiones "e PHPExcel/ en el !oro "e "e)ate . 9i -a &as aumenta"o la memoria &asta un m3ximo/ o no pue"e cam)iar su l:mite "e memoria/ entonces esta discusi'n en el !oro se "escri)en al unos "e los mKto"os 7ue se pue"en aplicar para re"ucir el uso "e la memoria "e las secuencias "e coman"os utili(an"o PHPExcel.
2.3.3.
>utoriales
;n3lEs PHPExcel tutorial &ttp#;;openxml"eveloper &ttp#;;openxml"eveloper
1rench PHPExcel tutorial 1rancEs PHPExcel tutorial &ttp#;; Bernaelsten."eveloppe(.com;tutoriels;excel2007; &ttp#;; B ernaelsten."eveloppe(.com;tutoriels;excel2007; Russian PHPExcel Flo3 Postin3s Rusia PHPExcel pu-licaciones en -lo3s &ttp#;;www.we)B0unior.net;so("anieBexcelB!a00lovBsBpomos&&-uBp&pexcel; &ttp#;;www.we)B0unior.net;so("anieBexcelB!a00lovBsBpomos&&-uBp&pexcel;
A Gapanese,lan3ua3e introduction to PHPExcel &ttp#;;0ournal.m-com.co.0p;articles;200D;03;0H;p&pexcel;in"ex.&tml ?na introducci'n de len3ua Haponesa para PHPExcel &ttp#;;0ournal.m-com.co.0p;articles;200D;03;0H;p&pexcel;in"ex.&tml
3.
3.1.
(r"uitectura
Esquemtica
3.2.
Lazy Loader
PHPExcel implementa un autocar a"or o = estor "e pere(oso=/ lo 7ue si ni!ica 7ue no es necesario incluir to"os los arc&ivos "entro "e PHPExcel. .t is onl- necessar- to inclu"e t&e initial PHPExcel class !ile/ t&en t&e autoloa"er will inclu"e ot&er class !iles as an" w&en re7uire"/ so onl- t&ose !iles t&at are actuall- re7uire" )- -our script will )e loa"e" into PHP memor-. 9%lo es necesario incluir el arc&ivo inicial "e la clase PHPExcel/ a continuaci%n/ el car a"or autom3tico se inclu-en otros arc&ivos "e clase cuan"o sea necesario/ "e mo"o 7ue s%lo a7uellos arc&ivos 7ue son re7ueri"as por la secuencia "e coman"os se car a en la memoria "e PHP. >&e main )ene!it o! t&is is t&at it re"uces t&e memor- !ootprint o! PHPExcel itsel!/ so t&at it uses less PHP memor-. El principal )ene!icio "e esto es 7ue re"uce el consumo "e memoria "e PHPExcel s: mismo/ para 7ue utilice menos memoria "e PHP. 9i sus propios scripts -a "e!inir una !unci%n "e car a autom3tica/ entonces esto pue"e ser so)reescrito por la !unci%n "e car a autom3tica PHPExcel. Jor example/ i! -ou &ave# Por e0emplo/ si uste" tiene#
&%nction'__a%toloa(($class)') ''''*** +
Ha a esto en su lu ar#
&%nction',-A%toloa(($class)') ''''*** + spl_a%toloa(_$egiste$(.,-A%toloa(.);
9u car a"or autom3tico a continuaci%n/ se coBexistir con el car a"or autom3tico "e PHPExcel.
3.3.
Spreadsheet(Hoja de Calculo) en
e oria
5a ar7uitectura PHPExcel se constru-e "e una manera 7ue pue"e servir como una &o0a "e c3lculo en la memoria. >&is means t&at/ i! one woul" want to create a we) )ase" view o! a sprea"s&eet w&ic& communicates wit& PHPExcelMs o)0ect mo"el/ &e woul" onl- &ave to write t&e !rontBen" co"e. Esto si ni!ica 7ue/ si uno 7uiere crear un punto "e vista )asa"o en we)/ "e una &o0a "e c3lculo 7ue se
10
comunica con el mo"elo "e o)0etos "e PHPExcel/ s%lo ten"r:a 7ue escri)ir el !inal "el c%"i o "e !rente. Al i ual 7ue una &o0a "e c3lculo "e escritorio/ PHPExcel representa una &o0a "e c3lculo 7ue contiene una o m3s &o0as "e c3lculo/ 7ue contienen cKlulas con "atos/ !%rmulas/ im3 enes/ ...
3.!.
"scritura y Lectura
Por su parte/ PHPExcel no proporciona la !uncionali"a" para leer o escri)ir en una &o0a "e c3lculo persistieron ,en el "isco o en una )ase "e "atos+. >o provi"e t&at !unctionalit-/ rea"ers an" writers can )e use". Para proporcionar esa !uncionali"a"/ los lectores - escritores pue"en ser utili(a"os. De !orma pre"etermina"a/ el pa7uete PHPExcel proporciona al unos lectores - escritores/ entre ellos uno para la &o0a "e c3lculo en !ormato 2pen 1M5 ,tam)iKn conoci"o como !ormato "e arc&ivo "e Excel 2007+. <ste" no est3 limita"o a los lectores - escritores por "e!ecto/ -a 7ue son li)res "e aplicar el PHPExcel'Lriter'.Oea"er - la inter!a( "e PHPExcel'Lriter'.Lriter en una clase personali(a"a.
11
3.!.
PHPExcel soporta inter!aces "e !lui"e( en la ma-or:a "e lu ares. Esto si ni!ica 7ue uste" pue"e !3cilmente =ca"ena= "e las llama"as a mKto"os espec:!icos sin necesi"a" "e una nueva "eclaraci%n "e PHP. Esto si ni!ica 7ue uste" pue"e !3cilmente =ca"ena= "e las llama"as a mKto"os espec:!icos sin necesi"a" "e una nueva "eclaraci%n "e PHP Por e0emplo/ tomemos el si uiente c%"i o#
$objPHPExcel !getP$ope$ties() !setC$eato$(/0aa$ten'1allia%2/); $objPHPExcel !getP$ope$ties() !setLast0o(i&ie(1-(/0aa$ten'1allia%2/); $objPHPExcel !getP$ope$ties() !set3itle(/4&&ice'5667'8LS8'3est'9oc%,ent/); $objPHPExcel !getP$ope$ties() !setS%bject(/4&&ice'5667'8LS8'3est'9oc%,ent/); $objPHPExcel !getP$ope$ties() !set9esc$iption(/3est'(oc%,ent'&o$'4&&ice'5667'8LS8:' gene$ate('%sing'PHP'classes*/); $objPHPExcel !getP$ope$ties() !set;e-2o$(s(/o&&ice'5667'openx,l'p#p/);
12
inter!aces "e Jluent se &an implementa"o para proporcionar una pro ramaci%n conveniente AP.. <se o! t&em is not re7uire"/ )ut can maCe -our co"e easier to rea" an" maintain. El uso "e ellos no es o)li atorio/ pero pue"e &acer 7ue su c%"i o sea m3s !3cil "e leer - mantener.
13
?.
#.1.
5a clase PHPExcel es el nAcleo "e PHPExcel. 4ontiene re!erencias a las &o0as "e c3lculo 7ue !i ura/ en el "ocumento la con!i uraci%n "e se uri"a" - meta "atos "el "ocumento. Para simpli!icar el concepto PHPExcel# la clase PHPExcel representa el li)ro.
#.2.
<na ve( 7ue se &an inclui"o los arc&ivos PHPExcel en el script/ pero antes "e crear instancias "e un o)0eto PHPExcel o car ar un arc&ivo "e li)ro/ &a- una serie "e opciones "e con!i uraci%n 7ue se pue"e esta)lecer 7ue a!ectar3n el comportamiento posterior "e la secuencia "e coman"os.
#.2.1.
PHPExcel utili(a un prome"io "e alre"e"or "e 1C;cell en sus &o0as "e tra)a0o/ ran"es li)ros tan r3pi"o pue"e utili(ar la memoria "isponi)le. el almacenamiento en cac&K "e la cKlula es un mecanismo 7ue permite PHPExcel para mantener los o)0etos "e cKlulas en un tama?o m3s pe7ue?o "e la memoria/ el "isco/ o en AP4/ memcac&e o Lin4ac&e/ en lu ar "e en la memoria "e PHP. Esto le permite re"ucir el uso "e memoria para los li)ros ran"es/ aun7ue a un costo "e veloci"a" para acce"er a "atos "e la cel"a. De !orma pre"etermina"a/ PHPExcel to"av:a tiene to"os los o)0etos "e cel"a "e memoria/ pero pue"e especi!icar alternativas. Para &a)ilitar el almacenamiento en cac&K "e cKlulas/ se "e)e llamar al PHPExcel'9ettin s## set4ac&e9tora eMet&o" ,+ mKto"o/ pasan"o por el mKto"o "e almacenamiento en cac&K 7ue "esea utili(ar.
$cac#e0et#o('<'PHPExcel_Cac#e(4bjectSto$age=acto$-::cac#e_in_,e,o$-; PHPExcel_Settings::setCac#eSto$age0et#o(($cac#e0et#o();
set#acheBtora3e*ethod=) "evolver3 un )ooleano true si tiene Kxito/ !also en caso "e !allo ,por e0emplo/ si tratan"o "e cac&K a AP4 en AP4 no est3 &a)ilita"o+. 5a memoria cac&K se mantiene por separa"o para ca"a &o0a "e c3lculo in"ivi"ual/ - se crea autom3ticamente cuan"o se crea una instancia "e la &o0a "e c3lculo )asa"o en el mKto"o "e almacenamiento en cac&K - la con!i uraci%n 7ue &a con!i ura"o. <ste" no pue"e cam)iar los a0ustes "e con!i uraci%n una ve( 7ue &an comen(a"o a leer un li)ro/ o &an crea"o su primera &o0a "e c3lculo. En la actuali"a"/ los mKto"os "e almacenamiento en cac&K est3n "isponi)les las si uientes. PHPExcel'4ac&e"2)0ect9tora eJactor-##cac&e'in'memor-^ El valor por "e!ecto. 9i no iniciali(ar cual7uier mKto"o "e almacenamiento en cac&K/ entonces este es el mKto"o 7ue usar3 PHPExcel. 4ell o)0ects are maintaine" in PHP memor- as at present. o)0etos "e la cKlula se mantiene en la memoria "e PHP como en la actuali"a". PHPExcel'4ac&e"2)0ect9tora eJactor-##cac&e'in'memor-'seriali(e"^ El uso "e este mKto"o "e almacenamiento en cac&K/ las cKlulas se mantienen en la memoria "e PHP como un con0unto "e o)0etos en serie/ lo 7ue re"uce la &uella "e memoria con so)recar a "e
14
ren"imiento m:nimo. PHPExcel'4ac&e"2)0ect9tora eJactor-##cac&e'in'memor-' (ip^ Al i ual 7ue cac&e'in'memor-'seriali(e"/ este mKto"o mantiene las cKlulas en la memoria "e PHP como un con0unto "e o)0etos en serie/ pero (ip para re"ucir el uso "e la memoria aAn m3s/ aun7ue el acceso a leer o escri)ir en una cel"a es un poco m3s lento. PHPExcel'4ac&e"2)0ect9tora eJactor-##cac&e'to'"isc.9AM^ 4uan"o se utili(a cac&e'to'"isc.9AM to"as las cKlulas se mantienen en un arc&ivo temporal en "isco/ con s%lo un :n"ice para su u)icaci%n en ese arc&ivo mantiene en la memoria "e PHP. Esto es m3s lento 7ue cual7uiera "e los mKto"os cac&e'in'memor-/ pero re"uce si ni!icativamente el consumo "e memoria. El arc&ivo "e "isco temporal se elimina autom3ticamente cuan"o el script !inali(a. PHPExcel'4ac&e"2)0ect9tora eJactor-##cac&e'to'p&p>emp^ Al i ual 7ue cac&e'to'"isc.9AM/ utili(an"o las cac&e'to'p&p>emp to"as las cKlulas se llevan a ca)o en el p&p# ; ; temp . ; 2 corriente/ con s%lo un :n"ice para su u)icaci%n mantiene en la memoria "e PHP. En PHP/ el p&p# ; ; memoria almacena contene"or "e "atos en la memoria# p&p# ; ; temp se comporta "e manera similar/ pero usa un arc&ivo temporal para almacenar los "atos cuan"o un l:mite "e memoria se alcan(a cierto. >&e "e!ault is 1 MB/ )ut -ou can c&an e t&is w&en initialisin cac&e'to'p&p>emp. El valor por "e!ecto es "e 1 MB/ pero pue"e cam)iar esto cuan"o la iniciali(aci%n cac&e'to'p&p>emp.
$cac#e0et#o('<'PHPExcel_Cac#e(4bjectSto$age=acto$-::'cac#e_to_p#p3e,p; $cac#eSettings'<'a$$a-('.',e,o$-Cac#eSi>e'.''<!'.?01. ''''''''''''''''''''''); PHPExcel_Settings::setCac#eSto$age0et#o(($cac#e0et#o(:'$cac#eSettings);
El p&p# ;; arc&ivo temporal se elimina autom3ticamente cuan"o el script !inali(a. PHPExcel'4ac&e"2)0ect9tora eJactor-##cac&e'to'apc^ 4uan"o se utili(a cac&e'to'apc/ o)0etos "e cKlulas se mantienen en un AP4 con s%lo un :n"ice mantiene en la memoria "e PHP para "eterminar 7ue la cKlula existe. Por "e!ecto/ un tiempo "e espera "e cac&K "e AP4 "e H00 se un"os se utili(a/ 7ue "e)er:a ser su!iciente para la ma-or:a "e las aplicaciones# aun7ue es posi)le cam)iar esto cuan"o la iniciali(aci%n cac&e'to'AP4.
$cac#e0et#o('<'PHPExcel_Cac#e(4bjectSto$age=acto$-::cac#e_to_APC; $cac#eSettings'<'a$$a-('.cac#e3i,e.''''''''<!'@66 ''''''''''''''''''''''); PHPExcel_Settings::setCac#eSto$age0et#o(($cac#e0et#o(:'$cac#eSettings);
4uan"o termina la secuencia "e coman"os to"as las entra"as ser3n retira"as "e AP4/ con in"epen"encia "el valor cac&e>ime/ por lo 7ue no se pue"e utili(ar para el almacenamiento persistente utili(an"o este mecanismo. PHPExcel'4ac&e"2)0ect9tora eJactor-##cac&e'to'memcac&e
1$
4uan"o se utili(a cac&e'to'memcac&e/ o)0etos "e cKlulas se mantienen en memcac&e 2 con s%lo un :n"ice mantiene en la memoria "e PHP para "eterminar 7ue la cKlula existe. De !orma pre"etermina"a/ PHPExcel )usca un servi"or memcac&e en local&ost en el puerto 11211. >am)iKn esta)lece un l:mite "e tiempo "e espera memcac&e "e H00 se un"os. 9i est3 e0ecutan"o memcac&e en un servi"or "i!erente o un puerto/ entonces uste" pue"e cam)iar estos valores pre"etermina"os al iniciali(ar cac&e'to'memcac&e#
$cac#e0et#o('<'PHPExcel_Cac#e(4bjectSto$age=acto$-::cac#e_to_,e,cac#e; $cac#eSettings'<'a$$a-('.,e,cac#eSe$"e$.''<!'.local#ost.: ''''''''''''''''''''''''.,e,cac#ePo$t.''''<!'AA5AA: ''''''''''''''''''''''''.cac#e3i,e.'''''''<!'@66 ''''''''''''''''''''''); PHPExcel_Settings::setCac#eSto$age0et#o(($cac#e0et#o(:'$cac#eSettings);
4uan"o termina la secuencia "e coman"os to"as las entra"as ser3n retira"as "e memcac&e/ in"epen"ientemente "el valor cac&e>ime/ por lo 7ue no se pue"e utili(ar para el almacenamiento persistente utili(an"o este mecanismo. PHPExcel'4ac&e"2)0ect9tora eJactor-##cac&e'to'wincac&e^ 4uan"o se utili(a cac&e'to'wincac&e/ o)0etos "e cKlulas se mantienen en Lin4ac&e 3 con s%lo un :n"ice mantiene en la memoria "e PHP para "eterminar 7ue la cKlula existe. or "e!ecto/ un tiempo "e espera "e cac&K Lin4ac&e "e H00 se un"os se utili(a/ 7ue "e)er:a ser su!iciente para la ma-or:a "e las aplicaciones# a pesar "e 7ue es posi)le cam)iar esta iniciali(aci%n cac&e'to'wincac&e cuan"o.
$cac#e0et#o('<'PHPExcel_Cac#e(4bjectSto$age=acto$-::cac#e_to_2incac#e; $cac#eSettings'<'a$$a-('.cac#e3i,e.''''''''<!'@66 ''''''''''''''''''''''); PHPExcel_Settings::setCac#eSto$age0et#o(($cac#e0et#o(:'$cac#eSettings);
4uan"o termina la secuencia "e coman"os to"as las entra"as ser3n retira"as "e Lin4ac&e/ in"epen"ientemente "el valor cac&e>ime/ por lo 7ue no se pue"e utili(ar para el almacenamiento persistente utili(an"o este mecanismo.
#.2.2.
Al unos elementos "e locali(aci%n &an si"o inclui"os en PHPExcel. Pue"e esta)lecer una con!i uraci%n re ional al cam)iar la con!i uraci%n. Para esta)lecer la con!i uraci%n re ional "e portu uKs "e Brasil se "e)er:a utili(ar#
$locale'<'.pt_b$.; $"ali(Locale'<'PHPExcel_Settings::setLocale($locale); i&'(B$"ali(Locale)') ec#o'.Cnable'to'set'locale'to'.*$locale*/' '$e"e$ting'to'en_%sDb$'E!Fn/; +
9i los arc&ivos "e i"ioma portu uKs "e Brasil no est3n "isponi)les/ a continuaci%n/ los portu ueses se &a)ilitar3 en su lu ar# si la len ua portu uesa arc&ivos no est3n "isponi)les/ entonces el setlocale ,+ mKto"o "evolver3 un error/ - el .n lKs Americano ,es'es+ con!i uraci%n se utili(a en to"o. M3s "etalles "e las !unciones "isponi)les una ve( a la con!i uraci%n re ional se &a esta)leci"o/ inclui"a una lista "e los i"iomas - las con!i uraciones re ionales compati)les actualmente/ se encuentra en la secci%n 4.$.$ 5ocale 9ettin s !or Jormulae . 4on!i uraci%n re ional para los prepara"os .
1H
#.3.
El o)0eto PHPExcel contiene re!erencias c:clicas ,por e0emplo/ el li)ro est3 relaciona"a con las &o0as "e c3lculo - las &o0as "e tra)a0o est3n vincula"os a su li)ro "e los pa"res+/ 7ue causa pro)lemas cuan"o PHP intenta )orrar los o)0etos "e la memoria cuan"o se unset ,+/ o al !inal "e una !unci%n cuan"o est3n en el 3m)ito local. El resulta"o "e esto es =pKr"i"as "e memoria=/ 7ue !3cilmente se pue"e utili(ar una ran canti"a" limita"a "e memoria "e PHP. Esto s%lo se pue"e resolver "e !orma manual# si es necesario "esarmar un li)ro/ entonces tam)iKn &a- 7ue =romper= estas re!erencias c:clicas antes "e &acerlo. PHPExcel provi"es t&e "isconnectLorCs&eets,+ met&o" !or t&is purpose. PHPExcel proporciona la "isconnectLorCs&eets ,+ para este prop%sito.
$objPHPExcel !(isconnectGo$Hs#eets(); %nset($objPHPExcel);
!.!.
#or$sheets
<na &o0a "e c3lculo es una colecci%n "e cel"as/ !%rmula/ im3 enes/ r3!icos/ ... >iene to"os los "atos 7ue "esea representar como una &o0a "e c3lculo &o0a "e c3lculo.
!.%.
&ccessin' cells
Acceso a las cKlulas en una &o0a "e c3lculo PHPExcel "e)er:a ser )astante sencillo. Este tema se enumeran al unas "e las opciones para acce"er a una cel"a.
#.!.1.
El esta)lecimiento "e un valor "e la cel"a por coor"ena"as se pue"e &acer utili(an"o los setCellVal%e mKto"o "e la &o0a "e c3lculo.
$objPHPExcel !getActi"eS#eet() !setCellVal%e(.1?.:'.So,e'"al%e.);
#.!.2.
Para recuperar el valor "e una cel"a/ la primera cel"a "e)e ser recupera"a "e la &o0a "e c3lculo utili(an"o el mKto"o getCell* El valor "e una cel"a se pue"e leer "e nuevo con la si uiente l:nea "e c%"i o#
$objPHPExcel !getActi"eS#eet() !getCell(.1?.) !getVal%e();
9i uste" necesita el valor calcula"o "e una cel"a/ utilice el si uiente c%"i o. Esto se explica en 4.4.3$ .
$objPHPExcel !getActi"eS#eet() !getCell(.1?.) !getCalc%late(Val%e();
#.!.3.
El esta)lecimiento "e un valor "e la cel"a por coor"ena"as se pue"e &acer uso "e &o0a "e c3lculo "e setCellVal%e1-Col%,nAn(Ro2 mKto"o.
EE'Set'cell'1? $objPHPExcel !getActi"eS#eet() !setCellVal%e1-Col%,nAn(Ro2(A:'?:'.So,e'"al%e.);
17
#.!.#.
Para recuperar el valor "e una cel"a/ la primera cel"a "e)e ser recupera"a "e la &o0a "e c3lculo utili(an"o el mKto"o getCell1-Col%,nAn(Ro2* El valor "e una cel"a se pue"e leer "e nuevo con la si uiente l:nea "e c%"i o# EE'4btene$'la'cel(a'1?
$objPHPExcel !getActi"eS#eet() !getCell1-Col%,nAn(Ro2(A:'?) !getVal%e();
9i uste" necesita el valor calcula"o "e una cel"a/ utilice el si uiente c%"i o. Esto se explica en 4.4.3$ EE'4btene$'la'cel(a'1?
$objPHPExcel !getActi"eS#eet() !getCell1-Col%,nAn(Ro2(A:'?) !getCalc%late(Val%e();
?.@.@.
Loopin, celdas
5a manera m3s !3cil a las cKlulas "el la(o es el uso "e itera"ores. <so "e itera"ores/ uno pue"e usar !oreac& para &o0as "e c3lculo "e )ucle/ !ilas - cel"as.
A /0123145/361 78 94872:5 41 8;89<=0 >01>8 78 =88 20>07 =07 ?5=0:87 >8 415 @0;5 >8 /A=/4=0 B =07 94872:5 81 415 25C=5.
DIp#p $objRea(e$'<'PHPExcel_I4=acto$-::c$eateRea(e$(.Excel5667.); $objRea(e$ !setRea(9ata4nl-(t$%e); $objPHPExcel'<'$objRea(e$ !loa((/test*xlsx/); $objGo$Hs#eet'<'$objPHPExcel !getActi"eS#eet(); ec#o'.Dtable!.'*'/Fn/; &o$eac#'($objGo$Hs#eet !getRo2Ite$ato$()'as'$$o2)') ''ec#o'.Dt$!.'*'/Fn/; ''$cellIte$ato$'<'$$o2 !getCellIte$ato$(); ''$cellIte$ato$ !setIte$ate4nl-ExistingCells(&alse);'EE'Este'la>os'(e'to(as'las' cJl%las:'
>en a en cuenta 7ue nos &emos !i0a"o cKlula itera"or setIte$ate4nl-ExistingCells "el () en !alse. Esto &ace 7ue el )ucle itera"or to"as las cKlulas/ aun7ue no se esta)lecieron antes.
1G
El repetidor celda devolver null co&o la celda si no se esta-lece en la hoHa de c5lculo$ Marco cKlula itera"or setIte$ate4nl-ExistingCells la () para )ucle &alsas to"as las cel"as "e la &o0a "e c3lculo 7ue pue"e estar "isponi)le en ese momento. Esto crear3 nuevas cKlulas si el aumento "e uso "e memoria - necesarioQ 9%lo se "e)e usar si est3 "estina"o a to"as las cKlulas "el la(o 7ue eventualmente "isponi)les.
@ota# En el :n"ice "e la columna PHPExcel est3 )asa"o en 0/ mientras 7ue :n"ice "e la !ila es "e )ase 1. >&at means MA1M _ ,0/1+ Eso si ni!ica MA1M _ ,0/1+ A continuaci%n se muestra un e0emplo "on"e se lee to"os los valores "e una &o0a "e c3lculo - los muestra en una ta)la.
DIp#p $objRea(e$'<'PHPExcel_I4=acto$-::c$eateRea(e$(.Excel5667.); $objRea(e$ !setRea(9ata4nl-(t$%e); $objPHPExcel'<'$objRea(e$ !loa((/test*xlsx/); $objGo$Hs#eet'<'$objPHPExcel !getActi"eS#eet(); $#ig#estRo2'<'$objGo$Hs#eet !getHig#estRo2();'EE'eje,plo'A6 $#ig#estCol%,n'<'$objGo$Hs#eet !getHig#estCol%,n();'EE'eje,plo'.=. $#ig#estCol%,nIn(ex'<'PHPExcel_Cell::col%,nIn(ex=$o,St$ing($#ig#estCol%,n);'eje,plo' O ec#o'.Dtable!.'*'/Fn/; &o$'($$o2'<'A;'$$o2'D<'$#ig#estRo2;'PP$$o2)') ''ec#o'.Dt$!.'*'/Fn/; ''&o$'($col'<'6;'$col'D<'$#ig#estCol%,nIn(ex;'PP$col)') ''''ec#o'.Dt(!.'*'$objGo$Hs#eet !getCell1-Col%,nAn(Ro2($col:'$$o2) !getVal%e()'*' .DEt(!.'*'/Fn/; ''+ ''ec#o'.DEt$!.'*'/Fn/; + ec#o'.DEtable!.'*'/Fn/; I!
#.!.,.
.nternamente/ PHPExcel PHPExcel_Cell_IVal%e1in(e$ utili(a una implementaci%n por "e!ecto (PHPExcel_Cell_9e&a%ltVal%e1in(e$) para "eterminar los tipos "e "atos "e los "atos intro"uci"os me"iante una cKlula setVal%e'() mKto"o. 2pcionalmente/ el comportamiento pre"etermina"o "e PHPExcel pue"e ser mo"i!ica"o/ lo 7ue !acilita la entra"a "e "atos. Por e0emplo/ una clase PHPExcel_Cell_A("ance(Val%e1in(e$' est3 presente. 4onvierte autom3ticamente los porcenta0es - las !ec&as "e entra"a como ca"enas con el !ormato correcto/ tam)iKn esta)lecer el estilo "e la in!ormaci%n "e la cKlula. En el e0emplo si uiente se muestra c%mo esta)lecer la carpeta "e valor en PHPExcel#
EQQ'PHPExcel'QE $eK%i$e_once'.PHPExcel*p#p.;
1D
EE'Establece$'la'ca$peta'(e'"alo$PHPExcel_Cell::setVal%e1in(e$('ne2'
PHPExcel_Cell_A("ance(Val%e1in(e$()');
EE'C$ea$'%n'n%e"o'objeto'PHPExcel
$objPHPExcel'<'ne2'PHPExcel(); EE'***
EE'Ag$ega$'alg%nos'(atos:'ase,ejLn(ose'a'alg%nos'tipos'(e'(atos'(i&e$entes
$objPHPExcel !getActi"eS#eet() !setCellVal%e(.AR.:'.Pe$centage'"al%e:.); $objPHPExcel !getActi"eS#eet() !setCellVal%e(.1R.:'.A6S.);
EE'Con"ie$te'a'6:A'-'conj%ntos'(e'estilo'(e'cel(a'po$centaje
EE'Con"ie$te'a'la'&ec#a'-'establece'el'&o$,ato'(e'&ec#a'estilo'(e'cel(a
Al enla(ar avan(a"a valor es necesario/ pue"e implementar la inter!a( PHPExcel_Cell_IVal%e1in(e$ o ampliar las clases o PHPExcel_Cell_A("ance(Val%e1in(e$'PHPExcel'4ell'De!ault8alueBin"er.
#.,.
P$PE%cel recetas
5as si uientes p3 inas le o!recemos al unas recetas utili(an PHPExcelBampliamente. >en a en cuenta 7ue estos no o!recen una "ocumentaci%n completa so)re "etermina"os PHPExcel !unciones "e la AP./ pero s%lo un olpe para empe(ar. 9i necesita las !unciones espec:!icas "e la AP./ consulte la "ocumentaci%n "e la AP.. Por e0emplo/ 4.4.7 9ettin a worCs&eetMs pa e orientation an" si(e covers settin a pa e orientation to A4. Marco "e orientaci%n "e la p3 ina - el tama?o "e una &o0a "e c3lculo a)arca esta)lecer una orientaci%n "e p3 ina A4. 2tros !ormatos "e papel/ como 4arta EE.<<./ no est3n cu)iertos en este "ocumento/ pero en la "ocumentaci%n "e la AP. PHPExcel.
#.,.1.
PHPExcel permite una manera !3cil "e con!i urar una &o0a "e c3lculo "e meta"atos/ utili(an"o la propie"a" "e acceso "e "ocumento. meta"atos "e &o0a "e c3lculo pue"e ser Atil para encontrar un "ocumento espec:!ico en un repositorio "e arc&ivos o un sistema "e esti%n "e "ocumentos. Por e0emplo/ Microso!t 9&arepoint utili(a los meta"atos "el "ocumento para )uscar un "ocumento espec:!ico en el "ocumento sus listas. &o0a "e c3lculo "e meta"atos Marco se &ace "e la si uiente manera#
$objPHPExcel !getP$ope$ties() !setC$eato$(/0aa$ten'1allia%2/); $objPHPExcel !getP$ope$ties() !setLast0o(i&ie(1-(/0aa$ten'1allia%2/); $objPHPExcel !getP$ope$ties() !set3itle(/4&&ice'5667'8LS8'3est'9oc%,ent/); $objPHPExcel !getP$ope$ties() !setS%bject(/4&&ice'5667'8LS8'3est'9oc%,ent/); $objPHPExcel !getP$ope$ties() !set9esc$iption(/3est'(oc%,ent'&o$'4&&ice'5667'8LS8:' gene$ate('%sing'PHP'classes*/); $objPHPExcel !getP$ope$ties() !set;e-2o$(s(/o&&ice'5667'openx,l'p#p/); $objPHPExcel !getP$ope$ties() !setCatego$-(/3est'$es%lt'&ile/);
20
#.,.2.
5a si uiente l:nea "e c%"i o esta)lece el :n"ice "e &o0a activa a la primera &o0a#
$objPHPExcel !setActi"eS#eetIn(ex(6);
#.,.3.
En Excel/ las !ec&as se almacenan como valores numKricos contan"o el nAmero "e ":as transcurri"os "es"e el 1;1;1D00. Por e0emplo/ la !ec&a M200GB12B31 Mse representa como 3DG13. <ste" pue"e veri!icar esto en Microso!t 2!!ice Excel me"iante la intro"ucci%n "e esa !ec&a en una cel"a "espuKs cam)iar el !ormato "e nAmero a =]eneral= por lo 7ue el valor numKrico ver"a" se revela. Escri)ir un valor "e !ec&a en una cel"a se compone "e "os l:neas "e c%"i o. 9eleccione el mKto"o 7ue m3s le conven a me0or. He a7u: al unos e0emplos# EQ'PHPExcel_Cell_A("anceVal%e1in(e$'necesa$ios'pa$a'esta',%est$a'QE'
$eK%i$e_once'.PHPExcelECellEA("ance(Val%e1in(e$*p#p.;
EE Co,o'la'&ec#a'-'#o$a'0-SNL'.566? A5 UA'.
PHPExcel_Cell::setVal%e1in(e$('ne2'PHPExcel_Cell_A("ance(Val%e1in(e$()'); $objPHPExcel !getActi"eS#eet() !setCellVal%e(.9A.:'.566? A5 UA.) $objPHPExcel !getActi"eS#eet() !getSt-le(.9A.) !getV%,be$=o$,at() !set=o$,atCo(e(PHPExcel_St-le_V%,be$=o$,at::=4R0A3_9A3E_WWWW0099SLASH)
EE'PHP tie,po'(tie,po'Cnix)
$ti,e'<'g,,Hti,e(6:6:6:A5:UA:566?);'EE'int(A5U6@?A@66) $objPHPExcel !getActi"eS#eet() !setCellVal%e(.9A.:' PHPExcel_S#a$e(_9ate::PHP3oExcel($ti,e)) $objPHPExcel !getActi"eS#eet() !getSt-le(.9A.) !getV%,be$=o$,at() !set=o$,atCo(e(PHPExcel_St-le_V%,be$=o$,at::=4R0A3_9A3E_WWWW0099SLASH)
EE'Excel'en'tie,po
$objPHPExcel !getActi"eS#eet() !setCellVal%e(.9A.:'UT?AU) $objPHPExcel !getActi"eS#eet() !getSt-le(.9A.) !getV%,be$=o$,at() !set=o$,atCo(e(PHPExcel_St-le_V%,be$=o$,at::=4R0A3_9A3E_WWWW0099SLASH)
5os mKto"os anteriores para intro"ucir una !ec&a/ to"os "an el mismo resulta"o. PHPExcel'9t-le'@um)erJormat proporciona una ran canti"a" "e !ormatos "e !ec&a "e!ini"aBpre. Iotas: 1. 8ea la secci%n =<so "e carpetas "e valor para !acilitar la entra"a "e "atos= para o)tener m3s in!ormaci%n acerca "e la A"vance"8alueBin"er utili(a"os en el primer e0emplo. 2. En versiones anteriores "e PHPExcel &asta e inclu-en"o 1.H.H/ cuan"o una cKlula ten:a un !ormato "e nAmero "e c%"i o como la !ec&a/ era posi)le intro"ucir una !ec&a "irectamente a travKs "e un nAmero entero "e PHP en tiempo sin tener 7ue convertirlos a !ormato "e !ec&a "e Excel. 9tartin wit& PHPExcel 1.H.7 t&is is no lon er supporte". A partir "e PHPExcel 1.H.7 esta -a no se a"mite. 3. Excel tam)iKn pue"e !uncionar en una )asa"a en el calen"ario 1D04 ,por "e!ecto para li)ros uar"a"os en Mac+. @ormalmente/ uste" no tiene 7ue preocuparse por esto cuan"o se utili(a PHPExcel.
21
#.,.#.
Dentro "el arc&ivo "e Excel/ las !%rmulas siempre se almacenan como aparecer:an en una versi%n en .n lKs "e Microso!t 2!!ice Excel/ - PHPExcel mane0a to"as las !%rmulas internamente en este !ormato. Esto si ni!ica 7ue las si uientes re las espera#
separa"or "ecimal es M.M ,perio"+ ,Per:o"o+ Junction ar ument separator is M/M ,comma+ ar umento "e separaci%n "e !unciones es =/=
,coma+
Matrix row separator is M^M ,semicolon+ !ila separa"or "e Matrix es =/= ,coma+ En lis& !unction names must )e use" !unci%n "e los nom)res "e .n lKs "e)e ser utili(a"o
Esto es in"epen"ientemente "e la versi%n "e i"ioma "e Microso!t 2!!ice Excel pue"e &a)er si"o utili(a"o para crear el arc&ivo "e Excel. Al !inal "el li)ro se a)re por el usuario/ Microso!t 2!!ice Excel se encar ar3 "e mostrar la !%rmula se An la len ua aplicaciones. >ranslation is taCen care o! )- t&e applicationQ 5a tra"ucci%n es a car o "e la aplicaci%nQ 5a si uiente l:nea "e c%"i o escri)e la !%rmula =F 9. ,44` $00/= lucro =/= pKr"i"a =+= en la cel"a BG.. >en a en cuenta 7ue la !%rmula "e)e comen(ar con =F= para &acer PHPExcel reconocer esto como una !%rmula.
$objPHPExcel !getActi"eS#eet() !setCellVal%e(.1?.:.<I=(CR!O66:/p$o&it/:/loss/).);
"e cKlulas "e la !%rmula A se pue"e leer "e nuevo con la si uiente l:nea "e c%"i o#
$&o$,%la'<'$objPHPExcel !getActi"eS#eet() !getCell(.1?.) !getVal%e();
9i uste" necesita el valor calcula"o "e una cel"a/ utilice el si uiente c%"i o. Esto se explica en 4.4.3$ .
$"al%e'<'$objPHPExcel !getActi"eS#eet() !getCell(.1?.) !getCalc%late(Val%e();
#.,.!.
Al unos elementos "e locali(aci%n &an si"o inclui"os en PHPExcel. Pue"e esta)lecer una con!i uraci%n re ional al cam)iar la con!i uraci%n. Para esta)lecer la con!i uraci%n re ional "e Ousia "e)e utili(ar#
$locale'<'.$%.; $"ali(Locale'<'PHPExcel_Settings::setLocale($locale); i&'(B$"ali(Locale)') ec#o'.Cnable'to'set'locale'to'.*$locale*/' '$e"e$ting'to'en_%sDb$'E!Fn/; +
9i el i"ioma "e los arc&ivos rusos no est3n "isponi)les/ el setlocale ,+ mKto"o "evolver3 un error/ la con!i uraci%n "e .n lKs se utili(ar3 en to"as partes. <na ve( 7ue &a-a esta)leci"o una con!i uraci%n re ional/ pue"e tra"ucir una !%rmula "e su interior .n lKs co"i!icaci%n.
$&o$,%la'<'$objPHPExcel !getActi"eS#eet() !getCell(.1?.) !getVal%e(); $t$anslate(=o$,%la'<' PHPExcel_Calc%lation::getInstance() !_t$anslate=o$,%la3oLocale($&o$,%la);
22
>am)iKn pue"e crear una !%rmula 7ue utili(a los nom)res "e !unci%n - separa"ores "e ar umentos apropia"os para la con!i uraci%n re ional "e!ini"a/ - lue o tra"ucirlo al .n lKs antes "e esta)lecer el valor "e la cel"a#
$&o$,%la'<'.<XYZ[U@6(X\]\(56A6;5;O);X\]\(56A6;A5;UA);^_]^Y\).; $inte$nal=o$,%la'<' PHPExcel_Calc%lation::getInstance() !t$anslate=o$,%la3oEnglis#($&o$,%la); $objPHPExcel !getActi"eS#eet() !setCellVal%e(.1?.:$inte$nal=o$,%la);
En la actuali"a"/ la tra"ucci%n s%lo tra"uce la !%rmula nom)res "e las !unciones/ las constantes >O<E - JA59E/ - los separa"ores ar umento "e la !unci%n. En la actuali"a"/ la con!i uraci%n re ional se a"miten los si uientes# +an3ua3e 4(ec& Danis& ]erman 9panis& Jinnis& Jrenc& Hun arian .talian Dutc& @orwe ian Polis& Portu uese Bra(ilian Portu uese Oussian 9we"is& aebtina DansC Deutsc& Espa?ol 9uomi Jrancais Ma -ar .taliano @e"erlan"s @orsC Pd(-C polsCi Portu ues Portu ues Brasileiro Xfggh[i \jkh 9vensCa +ocale #ode 4s Da De Es Ji Jr Hu .t @l @o Pl pt pt')r ru 9v
#.,.,.
En Microso!t 2!!ice Excel 7ue conse uir un salto "e l:nea en una cel"a pulsan"o AL3'P'=Enter=. 4uan"o se &ace esto/ autom3ticamente se convierte en =a0ustar el texto= para la cKlula. A7u: es c%mo lo rar esto en PHPExcel#
$objPHPExcel !getActi"eS#eet() !getCell(.AA.) !setVal%e(/#elloFn2o$l(/); $objPHPExcel !getActi"eS#eet() !getSt-le(.AA.) !getAlign,ent() !setG$ap3ext(t$%e);
:ip
5ea m3s so)re el !ormato "e cel"as utili(an"o getSt-le'() en otro lu ar.
:ip A("ance(Val%ebin(e$*p#p se encien"e autom3ticamente =a0ustar el texto= "e la cel"a cuan"o se ve un car3cter "e nueva l:nea en una ca"ena 7ue va a insertar en una cel"a. Pust liCe Microso!t 2!!ice Excel. Al i ual 7ue Microso!t 2!!ice Excel. Prue)a esto# $eK%i$e_once'.PHPExcelECellEA("ance(Val%e1in(e$*p#p.; PHPExcel_Cell::setVal%e1in(e$('ne2'PHPExcel_Cell_A("ance(Val%e1in(e$()'); $objPHPExcel !getActi"eS#eet() !getCell(.AA.) !setVal%e(/#elloFn2o$l(/); Oea" more a)out A("ance(Val%e1in(e$*p#p elsew&ere.
23
?.B.+.
Pue"e con!i urar tipo "e "atos "e una cel"a expl:citamente me"iante el mKto"o set8alueExplicit "e la cKlula/ o el mKto"o set4ell8alueExplicit "e una &o0a "e c3lculo. He a7u: un e0emplo# "e las @aciones <ni"as#
$objPHPExcel !getActi"eS#eet() !getCell(.AA.) !setVal%eExplicit(.5O.:' PHPExcel_Cell_9ata3-pe::3WPE_VC0ERIC);
?.B.C.
<ste" pue"e &acer 7ue una cKlula pue"e &acer clic en una "irecci%n <O5 me"iante el esta)lecimiento "e su propie"a" &iperv:nculo#
$objPHPExcel !getActi"eS#eet() !setCellVal%e(.E5@.:'.222*p#pexcel*net.); $objPHPExcel !getActi"eS#eet() !getCell(.E5@.) !getH-pe$linH() !setC$l(.#ttp:EE222*p#pexcel*net.);
S3 4728> >8785 @5/8: 41 @3<8:?D1/4=0 5 02:5 @0;5 >8 /A=/4=0 0 =5 /8=>5. 423=3/8 8= 73E438128 /6>3E0F
$objPHPExcel !getActi"eS#eet() !setCellVal%e(.E5@.:'.222*p#pexcel*net.); $objPHPExcel !getActi"eS#eet() !getCell(.E5@.) !getH-pe$linH() !setC$l(`s#eet:EE.S#eetna,e.BAAa);
?.B.E.
Marco orientaci%n "e la p3 ina una &o0a "e c3lculo - el tama?o se pue"e &acer utili(an"o las si uientes l:neas "e c%"i o#
$objPHPExcel !getActi"eS#eet() !getPageSet%p() !set4$ientation(PHPExcel_Go$Hs#eet_PageSet%p::4RIEV3A3I4V_LAV9SCAPE); $objPHPExcel !getActi"eS#eet() !getPageSet%p() !setPape$Si>e(PHPExcel_Go$Hs#eet_PageSet%p::PAPERSIZE_AR);
>en a en cuenta 7ue existen opciones a"icionales "e p3 inas "isponi)les. Por !avor/ consulte la "ocumentaci%n "e la AP. para to"as las opciones posi)les.
?.B.1*.
5as opciones "e con!i uraci%n "e p3 ina "e escala en PHPExcel se relacionan "irectamente con las opciones "e escala en la secci%n =4on!i urar p3 ina= "e "i3lo o como se muestra en la ilustraci%n. 5os valores por "e!ecto en PHPExcel correspon"en a valores por "e!ecto "e M9 2!!ice Excel/ como se muestra en la ilustraci%n
24
Vote
E&emplo
As: es como para aHustarse a una p53ina de ancho por altura in(inita p53inas:
$objPHPExcel !getActi"eS#eet() !getPageSet%p() !set=it3oGi(t#(A); $objPHPExcel !getActi"eS#eet() !getPageSet%p() !set=it3oHeig#t(6);
4omo pue"e ver/ no es necesario llamar a set=it3oPage'("e$(a(e$o) "es"e set=it3oGi(t#' (***) - set=it3oHeig#t'(***) provoca esto.
9i utili(a set=it3oGi(t#'() "e)e/ en eneral/ tam)iKn se especi!ica set=it3oHeig#t' ()'(e'&o$,a expl:cita como en el e0emplo. >en a cui"a"o "e con!iar en los valores iniciales. Esto es especialmente cierto si uste" est3 actuali(an"o "es"e PHPExcel 1.7.0 a 1.7.1/ "on"e los valores pre"etermina"os para el a0uste a la altura - el a0uste "e anc&oBa cam)ia"o "e 0 a 1.
#.,.11.
Pgina de mrgenes
Para esta)lecer los m3r enes "e p3 ina "e una &o0a "e c3lculo/ utilice el c%"i o#
2$
>en a en cuenta 7ue los valores "e los m3r enes se especi!ican en pul a"as.
#.,.12.
Para centrar una p3 ina &ori(ontal ; vertical/ pue"e utili(ar el c%"i o si uiente#
$objPHPExcel !getActi"eS#eet() !getPageSet%p() !setHo$i>ontalCente$e((t$%e); $objPHPExcel !getActi"eS#eet() !getPageSet%p() !setVe$ticalCente$e((&alse);
9ustituci%n - c%"i os "e !ormato ,a partir "e -+ se pue"e utili(ar "entro "e los enca)e(a"os - pies "e p3 ina. @o &a- un or"en necesario en el 7ue estos c%"i os "e)en aparecer.
5a primera aparici%n "e los si uientes c%"i os convierte el !ormato 2@/ la se un"a aparici%n convierte 2JJ "e nuevo# 9triCet&rou & >ac&a"o 9uperscript 9o)rescrito 9u)script 9u):n"ice
2H
9uper:n"ice - su):n"ice no pue"e ser am)as 2@ al mismo tiempo. 5o 7ue ocurra primero ana - el otro se pasa por alto/ mientras 7ue el primero est3 en 2@. 5os c%"i os si uientes son compati)les con excel2007#
&L
4%"i o "e la =secci%n "e la i(7uier"a= ,&a- tres "e ca)ecera locali"a"es "e pie "e p3 ina/ la =i(7uier"a=/ =centro=/ - ="erec&a=+. 4uan"o "os o m3s apariciones "e este marca"or "e secci%n existen/ el conteni"o "e to"os los marca"ores se concatenan/ en el or"en "e aparici%n/ - se coloca en la parte i(7uier"a. 4%"i o "e la =p3 ina actual l= 4%"i o "e =p3 inas totales= 4%"i o para =el tama?o "e !uente "e texto=/ "on"e el tama?o "e la !uente es un tama?o "e !uente en puntos. 4%"i o "e =color "e la !uente "e texto= J J O]B color se especi!ica como OO]]BB >ema "e color es speci!e" como >>9@@ "on"e >> es el ." color "el tema/ 9 es =m= o =B= "el ; valor som)ra tinte/ @@ es el tono ; valor som)ra.
4%"i o para =tac&a"o "e texto= on ; o!! 4%"i o para =super script "e texto= on ; o!! 4o"e !or =text su)script= on ; o!! 4%"i o para =el texto en su):n"ice= on ; o!! 4%"i o "e la =secci%n central=. 4uan"o "os o m3s apariciones "e este marca"or "e secci%n existen/ el conteni"o "e to"os los marca"ores se concatenan/ en el or"en "e aparici%n/ - se coloca en la secci%n central. 4%"i o para la =!ec&a= 4%"i o para el =tiempo= 4%"i o para la =ima en "e !on"o= Por !avor/ ase Arese "e a re ar la ima en a la ca)ecera ; pie "e p3 ina#
$obj9$a2ing'<'ne2' PHPExcel_Go$Hs#eet_Hea(e$=oote$9$a2ing(); $obj9$a2ing !setVa,e(.PHPExcel'logo.); $obj9$a2ing !setPat#(.*Ei,agesEp#pexcel_logo*gi&.); $obj9$a2ing !setHeig#t(U@); $objPHPExcel !getActi"eS#eet() !getHea(e$=oote$() !a((I,age($obj9$a2ing:' PHPExcel_Go$Hs#eet_Hea(e$=oote$::I0AcE_HEA9ER_LE=3);
4%"i o "e =solo texto su)ra-a"o= 4%"i o "e la ="o)le su)ra-a"o= 4%"i o "e la =secci%n "e la "erec&a=. 4uan"o "os o m3s apariciones "e este marca"or "e secci%n existen/ el conteni"o "e to"os los marca"ores se concatenan/ en el or"en "e aparici%n/ - se coloca en la secci%n "erec&a. 4%"i o para =la ruta "el arc&ivo "e este li)ro= 4%"i o para =nom)re "e arc&ivo "e este li)ro= 4%"i o "e la =!ic&a nom)re "e la &o0a= 4%"i o para a re ar a la p3 ina l 4%"i o "e restar "e la p3 ina l
27
4%"i o para =nom)re "e la !uente "e texto= - =!uente "e texto tipo=/ en nom)re "e la !uente - el tipo "e !uente son ca"enas 7ue especi!ica el nom)re - el tipo "e la !uente/ separa"os por una coma. 4uan"o aparece un ui%n en el nom)re "e la !uente/ 7ue si ni!ica =no especi!ica"o=. Am)os nom)re "e la !uente - el tipo "e !uente pue"e ser valores locali(a"os. 4%"i o para la =ne rita= 4%"i o para la =ne rita= 4%"i o "e =estilo "e !uente re ular= 4%"i o "e =estilo "e !uente cursiva= 4%"i o "e =estilo "e !uente cursiva= 4%"i o para =cursiva ne rita= 4%"i o "e =estilo "e es7uema= 4%"i o "e =estilo "e som)ra=
:ip
5a ta)la "e arri)a "e los c%"i os pue"e parecer a)ruma"ora primera ve( 7ue est3 tratan"o "e encontrar la manera "e escri)ir al unas "e ca)ecera o pie "e p3 ina. A!ortuna"amente/ &a- una manera m3s !3cilDe0e 7ue Microso!t 2!!ice Excel &acer el tra)a0o por uste".
Por e0emplo/ cree en Microso!t 2!!ice Excel un arc&ivo xlsx "on"e se inserta el enca)e(a"o - pie "e p3 ina como "esee usan"o los pro ramas "e la propia inter!a(. 9ave !ile as test*xlsx . ]uar"ar arc&ivo como test*xlsx* @ow/ taCe t&at !ile an" rea" o!! t&e values usin PHPExcel as !ollows# A&ora/ toma el arc&ivo - leer los valores utili(an"o PHPExcel "e la si uiente manera#
$objPHPexcel'<'PHPExcel_I4=acto$-::loa((.test*xlsx.); $objGo$Hs#eet'<'$objPHPexcel !getActi"eS#eet(); "a$_(%,p($objGo$Hs#eet !getHea(e$=oote$() !get4((=oote$()); "a$_(%,p($objGo$Hs#eet !getHea(e$=oote$() !getE"en=oote$()); "a$_(%,p($objGo$Hs#eet !getHea(e$=oote$() !get4((Hea(e$()); var'"ump,no)0LorCs&eetB` etHea"erJooter,+B` etEvenHea"er,++^ oue revela los c%"i os para la par ; impar enca)e(a"o - pie "e p3 ina. 5os usuarios experimenta"os pue"en encontrar m3s !3cil cam)iar el nom)re "e test*xlsx a test*>ip: "escomprimirlo/ e inspeccionar "irectamente el conteni"o "e la xl pertinentes E'#ojas'E's#eet8*x,l para encontrar los c%"i os "e enca)e(a"o - pie "e p3 ina.
#.,.1#.
Para esta)lecer un "escanso "e impresi%n/ utilice el si uiente c%"i o/ 7ue esta)lece un "escanso "e !ila en !ila 10.
$objPHPExcel !getActi"eS#eet() !set1$eaH('.AA6.':'PHPExcel_Go$Hs#eet::1REA;_R4G');
#.,.1!.
Para mostrar ; ocultar l:neas "e "ivisi%n al imprimir/ utilice el si uiente c%"i o#
$objPHPExcel !getActi"eS#eet() !setS#o2c$i(lines(t$%e);
2G
#.,.1,.
PHPExcel pue"e repetir !ilas espec:!icas ; las cKlulas en la parte superior e i(7uier"a "e una p3 ina. El c%"i o si uiente es un e0emplo "e c%mo repetir la !ila 1 a $ en ca"a p3 ina impresa "e una &o0a "e c3lculo espec:!ica#
$objPHPExcel !getActi"eS#eet() !getPageSet%p() !setRo2s3oRepeatAt3op1-Sta$tAn(En((A:'O);
#.,.18.
Para especi!icar la &o0a "e c3lculo "e 3rea "e impresi%n/ utilice el si uiente c%"i o#
$objPHPExcel !getActi"eS#eet() !getPageSet%p() !setP$intA$ea(.AA:EO.);
>am)iKn se pue"e imprimir mAltiples 3reas en una sola &o0a "e c3lculo#
$objPHPExcel !getActi"eS#eet() !getPageSet%p() !setP$intA$ea(.AA:EO:cR:056.);
#.,.19.
"ormato de celdas
<na cKlula pue"e tener el !ormato "e !uente/ )or"e/ relleno/ ... la in!ormaci%n "e estilo. Por e0emplo/ se pue"e a0ustar el color "e !on"o "e una cel"a a ro0o/ a0usta"o a la "erec&a/ - la !rontera a !rontera ruesa estilo - ne ro. 8amos a &acer 7ue en la cel"a B2#
$objPHPExcel !getActi"eS#eet() !getSt-le(.15.) !get=ont() !getColo$() !setARc1(PHPExcel_St-le_Colo$::C4L4R_RE9); $objPHPExcel !getActi"eS#eet() !getSt-le(.15.) !getAlign,ent() !setHo$i>ontal(PHPExcel_St-le_Align,ent::H4RIZ4V3AL_RIcH3); $objPHPExcel !getActi"eS#eet() !getSt-le(.15.) !get1o$(e$s() !set1o$(e$St-le(PHPExcel_St-le_1o$(e$::14R9ER_3HIC;); $objPHPExcel !getActi"eS#eet() !getSt-le(.15.) !get1o$(e$s() !set1o$(e$St-le(PHPExcel_St-le_1o$(e$::14R9ER_3HIC;); $objPHPExcel !getActi"eS#eet() !getSt-le(.15.) !get1o$(e$s() !set1o$(e$St-le(PHPExcel_St-le_1o$(e$::14R9ER_3HIC;); $objPHPExcel !getActi"eS#eet() !getSt-le(.15.) !get1o$(e$s() !set1o$(e$St-le(PHPExcel_St-le_1o$(e$::14R9ER_3HIC;); !get3op() !get1otto,() !getLe&t() !getRig#t()
$objPHPExcel !getActi"eS#eet() !getSt-le(.15.) !get=ill() !set=ill3-pe(PHPExcel_St-le_=ill::=ILL_S4LI9); $objPHPExcel !getActi"eS#eet() !getSt-le(.15.) !get=ill() !getSta$tColo$() !setARc1(.====6666.);
A partir "e PHPExcel 1.7.0 et9t-le ,+ tam)iKn acepta un ran o "e cel"as como un par3metro. Por e0emplo/ pue"e esta)lecer un !on"o "e color ro0o en un ran o "e cel"as#
$objPHPExcel !getActi"eS#eet() !getSt-le(.1U:17.) !get=ill() !set=ill3-pe(PHPExcel_St-le_=ill::=ILL_S4LI9) !getSta$tColo$() !setARc1(.====6666.);
>ip
9e recomien"a al estilo "e las cKlulas a la ve(/ utili(an"o et9t-le por e0emplo ,=A1# M$00+/ en ve( "e la)rar las cKlulas "e !orma in"ivi"ual en un )ucle. Esto es muc&o m3s r3pi"o en comparaci%n con )ucle a travKs "e las cKlulas - el estilo "e !orma in"ivi"ual.
2D
>am)iKn &a- una !orma alternativa para esta)lecer estilos. El c%"i o si uiente "e!ine el estilo "e una cKlula "e ne rita/ alineaci%n "erec&a/ )or"e superior "el a"o - un relleno "e "e ra"a"o#
$st-leA$$a-'<'a$$a-( .&ont.'<!'a$$a-( .bol(.'<!'t$%e: ): .align,ent.'<!'a$$a-( .#o$i>ontal.'<!'PHPExcel_St-le_Align,ent::H4RIZ4V3AL_RIcH3: ): .bo$(e$s.'<!'a$$a-( .top.'<!'a$$a-( .st-le.'<!'PHPExcel_St-le_1o$(e$::14R9ER_3HIV: ): ): .&ill.'<!'a$$a-( .t-pe.'<!'PHPExcel_St-le_=ill::=ILL_cRA9IEV3_LIVEAR: .$otation.'<!'T6: .sta$tcolo$.'<!'a$$a-( .a$gb.'<!'.==A6A6A6.: ): .en(colo$.'<!'a$$a-( .a$gb.'<!'.========.: ): ): ); $objPHPExcel !getActi"eS#eet() !getSt-le(.AU.) !appl-=$o,A$$a-($st-leA$$a-);
Este mKto"o alternativo utili(an"o matrices "e)e ser m3s r3pi"o en tKrminos "e e0ecuci%n ca"a ve( 7ue va a con!i urar m3s "e una propie"a" "e estilo. Pero la "i!erencia apenas se pue"e me"ir a menos 7ue &a-a "i!erentes estilos en el li)ro.
Antes "e PHPExcel 1.7.0 "uplicate9t-leArra- ,+ es el mKto"o recomen"a"o para la)rar un ran o "e cel"as/ pero este mKto"o &a 7ue"a"o en "esuso "es"e et9t-le ,+ &a comen(a"o a aceptar un ran o "e cel"as.
#.,.1:.
;mero de ormatos
A menu"o se "esea !ormato a los nAmeros en Excel. Por e0emplo/ uste" pue"e "esear un separa"or "e miles/ m3s un nAmero !i0o "e "ecimales "espuKs "el separa"or "ecimal. 2 tal ve( 7uieres un poco los nAmeros para ser rellena"o con ceros. En Microso!t 2!!ice Excel 7ue estKn !amiliari(a"os con la selecci%n "e un !ormato "e nAmero "el =Jormato "e cel"as= "e "i3lo o. A7u: &a- al unos !ormatos pre"e!ini"os nAmero "isponi)le inclu-en"o al unas "e las !ec&as. El "i3lo o est3 "ise?a"o "e una manera para 7ue uste" no tiene 7ue interactuar con el nAmero "e c%"i o su)-acente !ormato cru"o a menos 7ue necesite un !ormato "e nAmero personali(a"o. En PHPExcel/ tam)iKn pue"e aplicar varios !ormatos pre"e!ini"os "e nAmero. E0emplo#
$objPHPExcel !getActi"eS#eet() !getSt-le(.AA.) !getV%,be$=o$,at() !set=o$,atCo(e(PHPExcel_St-le_V%,be$=o$,at::=4R0A3_VC01ER_C400A_SEPARA3E9A);
30
Este !ormato ser3 un nAmero por e0emplo/ 1.$G7/2 por lo 7ue se muestra como 1/$G7.20 al a)rir el li)ro en Microso!t 2!!ice Excel. ,Depen"ien"o "e la con!i uraci%n "e los separa"ores "ecimales - "e miles "e Microso!t 2!!ice Excel 7ue pue"e aparecer como 1.$G7/20+ <ste" pue"e conse uir exactamente lo mismo 7ue lo anterior me"iante el uso "e este#
$objPHPExcel !getActi"eS#eet() !getSt-le(.AA.) !getV%,be$=o$,at() !set=o$,atCo(e(.d:dd6*66.);
En Microso!t 2!!ice Excel/ as: como en PHPExcel/ uste" ten"r3 7ue interactuar con el !ormato OAL c%"i os numKricos siempre 7ue uste" necesite al unos "e !ormato nAmero especial. E0emplo#
$objPHPExcel !getActi"eS#eet() !getSt-le(.AA.) !getV%,be$=o$,at() !set=o$,atCo(e(.e1l%efe!<U666f$d:dd6;eRe(feD6f$d:dd6;$d:dd6.);
2tro e0emplo es cuan"o se "esea 7ue los nAmeros cero rellena"o con ceros a la i(7uier"a con una lon itu" !i0a#
:ip
5as re las para componer un c%"i o "e !ormato "e nAmero en Excel pue"e ser )astante complica"o. A veces/ uste" sa)e c%mo crear un !ormato "e nAmero en Microso!t 2!!ice Excel/ pero no sa)en lo 7ue el nAmero "e c%"i o "el !ormato su)-acente parece.p4%mo lo encontrasteE 5os lectores env:an con PHPExcel venir al rescate. 4ar ue su plantilla "e li)ro usan"o/ por e0emplo excel2007 lector a revelar el c%"i o "e !ormato "e nAmero. E0emplo "e como leer un c%"i o "e !ormato "e nAmero para la cel"a A1#
$objRea(e$'<'PHPExcel_I4=acto$-::c$eateRea(e$(.Excel5667.); $objPHPExcel'<'$objRea(e$ !loa((.te,plate*xlsx.); "a$_(%,p($objPHPExcel !getActi"eS#eet() !getSt-le(.AA.) !getV%,be$=o$,at() !get=o$,atCo(e());
5os usuarios avan(a"os pue"en encontrar m3s r3pi"amente a inspeccionar el c%"i o "e !ormato "e nAmero "irectamente por el cam)io "e nom)re a template.xlsx template.(ip/ "escomprimir/ - en )usca "e la pie(a relevante "e c%"i o 1M5 "e explotaci%n/ el c%"i o "e !ormato "e nAmero en xl styles.xml.
#.,.2<.
8amos a con!i urar la alineaci%n vertical "e la parte superior "e las cel"as AA:'9R
$objPHPExcel !getActi"eS#eet() !getSt-le(.AA:9R.) !getAlign,ent() !setVe$tical(PHPExcel_St-le_Align,ent::VER3ICAL_34P);
31
#.,.21.
Es posi)le esta)lecer el estilo pre"etermina"o "e un li)ro. 8amos a esta)lecer la !uente pre"etermina"a Arial "e tama?o G#
$objPHPExcel !get9e&a%ltSt-le() !get=ont() !setVa,e(.A$ial.); $objPHPExcel !get9e&a%ltSt-le() !get=ont() !setSi>e(?);'
#.,.22.
En PHPExcel es !3cil "e aplicar "i!erentes !ronteras en una selecci%n rectan ular. As: es como aplicar un es7uema "e color ro0o )or"e rueso alre"e"or "e las cel"as B2# "el ]BG.
$st-leA$$a-'<'a$$a-( .bo$(e$s.'<!'a$$a-( .o%tline.'<!'a$$a-( .st-le.'<!'PHPExcel_St-le_1o$(e$::14R9ER_3HIC;: .colo$.'<!'a$$a-(.a$gb.'<!'.====6666.): ): ): ); $objGo$Hs#eet !getSt-le(.15:c?.) !appl-=$o,A$$a-($st-leA$$a-);
En Microso!t 2!!ice Excel/ la operaci%n anterior se correspon"er:a con la selecci%n "e las cel"as B2# "el ]BG/ el lan(amiento "e el cua"ro "e "i3lo o "e estilo/ la elecci%n "e un )or"e ro0o - espeso/ &acer clic en el es7uema =componente "e la !rontera=.
>en a en cuenta 7ue las l:neas !ronteri(as se aplica a la selecci%n rectan ular B2# "el ]BG en su con0unto/ no en ca"a cKlula in"ivi"ual. <ste" pue"e lo rar cual7uier e!ecto "e )or"e me"iante el uso "e s%lo el cinco !ronteras "e )ase operativos en una sola cKlula en un momento# Arra/ .e/ le!t ri &t top )ottom "ia onal *aps to propert/ et5e!t,+ etOi &t,+ et>op,+ etBottom,+ etDia onal,+
acceso "irecto "e las !ronteras a"icional mu- Atil/ como en el e0emplo encima "e la. >&ese are t&e s&ortcut )or"ers availa)le# Estos son los l:mites "e acceso "irecto "isponi)les# Arra/ .e/ all)or"ers outline insi"e vertical &ori(ontal *aps to propert/ etAllBor"ers,+ et2utline,+ et.nsi"e,+ et8ertical,+ etHori(ontal,+
<na visi%n eneral "e to"os los accesos "irectos !rontera se pue"e ver en la si uiente
32
ima en#
9i al mismo tiempo esta)lecer all)or"ers por e0emplo/ - vertical/ entonces tenemos =superposici%n= "e las !ronteras/ - uno "e los componentes tiene 7ue anar so)re el otro/ "on"e no &a- !ronteras se superponen. En PHPExcel/ el m3s "K)il al m3s !uerte "e las !ronteras/ la lista es la si uiente# all)or"ers/ contorno ; interior/ vertical - &ori(ontal/ i(7uier"a ; "erec&a ; arri)a ; a)a0o ; "ia onal. Esta 0erar7u:a "e la !rontera pue"e ser utili(a"a para lo rar e!ectos "i!erentes "e una manera !3cil.
#.,.23.
<na cKlula pue"e "ar !ormato con"icional/ con )ase en una norma espec:!ica. Por e0emplo/ se pue"e a0ustar el color "e !on"o "e una cel"a a ro0o si su valor est3 por "e)a0o "e cero/ - ver"e si su valor es cero o m3s. 9e pue"e esta)lecer un con0unto "e re las "e estilo con"icional a una cel"a usan"o el si uiente c%"i o#
$objCon(itionalA'<'ne2'PHPExcel_St-le_Con(itional(); $objCon(itionalA !setCon(ition3-pe(PHPExcel_St-le_Con(itional::C4V9I3I4V_CELLIS); $objCon(itionalA !set4pe$ato$3-pe(PHPExcel_St-le_Con(itional::4PERA34R_LESS3HAV); $objCon(itionalA !a((Con(ition(.6.); $objCon(itionalA !getSt-le() !get=ont() !getColo$() !setARc1(PHPExcel_St-le_Colo$::C4L4R_RE9); $objCon(itionalA !getSt-le() !get=ont() !set1ol((t$%e); $objCon(itional5'<'ne2'PHPExcel_St-le_Con(itional(); $objCon(itional5 !setCon(ition3-pe(PHPExcel_St-le_Con(itional::C4V9I3I4V_CELLIS); $objCon(itional5 !set4pe$ato$3-pe(PHPExcel_St-le_Con(itional::4PERA34R_cREA3ER3HAV4RENCAL); $objCon(itional5 !a((Con(ition(.6.); $objCon(itional5 !getSt-le() !get=ont() !getColo$() !setARc1(PHPExcel_St-le_Colo$::C4L4R_cREEV); $objCon(itional5 !getSt-le() !get=ont() !set1ol((t$%e); $con(itionalSt-les'<'$objPHPExcel !getActi"eS#eet() !getSt-le(.15.) !getCon(itionalSt-les(); a$$a-_p%s#($con(itionalSt-les:'$objCon(itionalA); a$$a-_p%s#($con(itionalSt-les:'$objCon(itional5);
33
9i "esea copiar el con0unto "e re las a otras cel"as/ pue"e "uplicar el o)0eto "e estilo#
$objPHPExcel !getActi"eS#eet() !(%plicateSt-le('$objPHPExcel !getActi"eS#eet() !getSt-le(.15.):'.1U:17.');
#.,.2#.
Para a re ar un comentario a una cel"a/ utilice el si uiente c%"i o. El e0emplo si uiente a re a un comentario a la cel"a E11#
$objPHPExcel !getActi"eS#eet() !getCo,,ent(.EAA.) !setA%t#o$(.PHPExcel.); $objCo,,entRic#3ext'<'$objPHPExcel !getActi"eS#eet() !getCo,,ent(.EAA.) !get3ext() !c$eate3extR%n(.PHPExcel:.); $objCo,,entRic#3ext !get=ont() !set1ol((t$%e); $objPHPExcel !getActi"eS#eet() !getCo,,ent(.EAA.) !get3ext() !c$eate3extR%n(/F$Fn/); $objPHPExcel !getActi"eS#eet() !getCo,,ent(.EAA.) !get3ext() !c$eate3extR%n(.3otal' a,o%nt'on't#e'c%$$ent'in"oice:'excl%(ing'VA3*.);
#.,.2!.
Ase3Krese de 2ue sie&pre inclu/en la 3a&a co&pleta de (iltroL Excel es compati)le con a0uste s%lo la !ila "e t:tulo/ pero eso no es una )uena pr3ctica ...
#.,.2,.
Excel o!rece 3 niveles "e =protecci%n=# se uri"a" "e los "ocumentos/ &o0as "e se uri"a" - la se uri"a" "e la cKlula. 5a protecci%n "e "ocumentos le permite esta)lecer una contrase?a en una &o0a "e c3lculo completa/ lo 7ue permite 7ue se &a an cam)ios s%lo cuan"o se intro"u(ca la contrase?a. Ho0a "e se uri"a" o!rece otras opciones "e se uri"a"# pue"e no permitir la inserci%n "e !ilas en una &o0a espec:!ica/ la clasi!icaci%n no permitir/ ...
34
la se uri"a" "e la cKlula o!rece la opci%n "e )lo7uear ; "es)lo7uear un celular/ as: como mostrar ; ocultar la !%rmula interna
<n e0emplo "e &o0a "e c3lculo "e con!i uraci%n "e se uri"a"#
$objPHPExcel $objPHPExcel $objPHPExcel $objPHPExcel $objPHPExcel !getActi"eS#eet() !getActi"eS#eet() !getActi"eS#eet() !getActi"eS#eet() !getActi"eS#eet() !getP$otection() !getP$otection() !getP$otection() !getP$otection() !getP$otection() !setPass2o$((.PHPExcel.); !setS#eet(t$%e); !setSo$t(t$%e); !setInse$tRo2s(t$%e); !set=o$,atCells(t$%e);
Ase3Krese de acti%ar la protecci'n de hoHa de c5lculo si necesita al3una de las caracterMsticas de protecci'n de hoHa de c5lculoNL Esto se pue"e &acer utili(an"o el si uiente c%"i o n o)0PHPExcelB`# etActive9&eet ,+ B` etProtection ,+ B` set9&eet ,ver"a"ero+
#.,.28.
5a vali"aci%n "e "atos es una potente caracter:stica "e excel2007. 9e permite especi!icar un !iltro "e entra"a "e los "atos 7ue se pue"en insertar en una cel"a espec:!ica. Este !iltro pue"e ser un 3rea "e "istri)uci%n ,es "ecir/ el valor "e)e estar entre 0 - 10+/ una lista ,en valor "e)e ser selecciona"o "e una lista+/ ... El si uiente !ra mento "e c%"i o s%lo permite un nAmero entre 10 - 20 7ue se entr% en la cel"a B3#
$objVali(ation'<'$objPHPExcel !getActi"eS#eet() !getCell(.1U.) !get9ataVali(ation(); $objVali(ation !set3-pe('PHPExcel_Cell_9ataVali(ation::3WPE_GH4LE'); $objVali(ation !setE$$o$St-le('PHPExcel_Cell_9ataVali(ation::S3WLE_S34P'); $objVali(ation !setAllo21lanH(t$%e); $objVali(ation !setS#o2Inp%t0essage(t$%e); $objVali(ation !setS#o2E$$o$0essage(t$%e); $objVali(ation !setE$$o$3itle(.Inp%t'e$$o$.); $objVali(ation !setE$$o$(.V%,be$'is'not'allo2e(B.); $objVali(ation !setP$o,pt3itle(.Allo2e('inp%t.); $objVali(ation !setP$o,pt(.4nl-'n%,be$s'bet2een'A6'an('56'a$e'allo2e(*.); $objVali(ation !set=o$,%laA(A6); $objVali(ation !set=o$,%la5(56);
El si uiente !ra mento "e c%"i o s%lo permite un elemento selecciona"o "e una lista "e "atos 7ue "e)en !i urar en la cel"a B3#
$objVali(ation'<'$objPHPExcel !getActi"eS#eet() !getCell(.1O.) !get9ataVali(ation();
3$
$objVali(ation $objVali(ation $objVali(ation $objVali(ation $objVali(ation $objVali(ation $objVali(ation $objVali(ation $objVali(ation $objVali(ation $objVali(ation
!set3-pe('PHPExcel_Cell_9ataVali(ation::3WPE_LIS3'); !setE$$o$St-le('PHPExcel_Cell_9ataVali(ation::S3WLE_IV=4R0A3I4V'); !setAllo21lanH(&alse); !setS#o2Inp%t0essage(t$%e); !setS#o2E$$o$0essage(t$%e); !setS#o29$op9o2n(t$%e); !setE$$o$3itle(.Inp%t'e$$o$.); !setE$$o$(.Val%e'is'not'in'list*.); !setP$o,pt3itle(.PicH'&$o,'list.); !setP$o,pt(.Please'picH'a'"al%e'&$o,'t#e'($op (o2n'list*.); !set=o$,%laA(./Ite,'A:Ite,'1:Ite,'C/.);
4uan"o se utili(a una lista "e vali"aci%n "e "atos como los anteriores/ ase Arese "e poner la lista entre =-= - 7ue "ivi"e los elementos con una coma ,/+. Es importante recor"ar 7ue cual7uier ca"ena 7ue participan en una !%rmula "e Excel se permite un m3ximo "e 2$$ caracteres ,no )-tes+. Esto esta)lece un l:mite en el nAmero "e elementos 7ue pue"e tener en la ca"ena =Punto A/ Punto B/ Punto 4=. Por lo tanto/ normalmente es una me0or i"ea "e escri)ir el art:culo "irectamente los valores en al unos ran o "e cel"as/ por e0emplo A1# A3/ - en lu ar "e utili(ar/ por e0emplo/ n o)08ali"ationB` setJormula1 ,MHo0a "e 3Q n A n 1# n A nM. 2tro )ene!icio es 7ue el tema pue"e contener los valores propios "e la coma M/M persona0e. 9i uste" necesita la vali"aci%n "e "atos en varias cel"as/ se pue"e clonar el con0unto "e re las#
$objPHPExcel !getActi"eS#eet() !getCell(.1?.) !set9ataVali(ation(clone' $objVali(ation);
#.,.29.
9i "esea PHPExcel para reali(ar un c3lculo autom3tico "e anc&o/ utilice el si uiente c%"i o. PHPExcel se aproximar3 a la columna con el anc&o "e la columna "e valor m3s amplia.
$objPHPExcel !getActi"eS#eet() !getCol%,n9i,ension(.1.) !setA%toSi>e(t$%e);
5a me"i"a para el anc&o "e columna en PHPExcel no correspon"e exactamente a la me"i"a con 7ue se pue"e utili(ar en Microso!t 2!!ice Excel. anc&os "e columna son "i!:ciles "e tratar en Excel/ - &a- varias me"i"as para el anc&o "e columna.
1+ Ancho interior en unidades de caracteres ,por e0emplo G.43 esto es pro)a)lemente lo 7ue uste" est3 !amiliari(a"o con en Excel+ 2+ de ancho total en pMxeles ,por e0emplo/ H4 p:xeles+ 3+ de ancho total en unidades de caracteres ,por e0emplo/ D.140H2$/ el valor B1 in"ica anc&o "e "esconexi%n+
3H
PHPExcel sie&pre opera con A) Ode ancho total en unidades de car5cterO 7ue en reali"a" es el Anico valor 7ue se almacena en un arc&ivo "e Excel/ por lo tanto/ la me"i"a m3s !ia)le. <n!ortunatel-. Por "es racia/ *icroso(t "((ice Excel no te presenta&os esta &edida$ En cam)io las me"i"as 1+ - 2+ se calculan me"iante la aplicaci%n cuan"o se a)re el arc&ivo - estos valores se presentan en "iversos "i3lo os - conse0os "e la &erramienta. 5a uni"a" "e anc&o "e car3cter es el anc&o "e un =0= ,cero+ li!o en la !uente pre"etermina"a li)ros. Por lo tanto anc&o "e las columnas se mi"e en uni"a"es "e car3cter en "os li)ros "i!erentes s%lo se pue"e comparar si tienen la !uente pre"etermina"a mismo li)ro. 9i tiene al An arc&ivo "e Excel - la necesi"a" "e conocer el anc&o "e las columnas "e la me"i"a 3+/ pue"e leer el arc&ivo "e Excel con PHPExcel - el eco "e los valores recupera"os.
#.,.2:.
Para esta)lecer la &o0a "e c3lculo "e la visi)ili"a" "e una columna/ pue"e utili(ar el c%"i o si uiente. 5a primera l:nea muestra expl:citamente la columna 4/ la se un"a l:nea "e la columna oculta D.
$objPHPExcel !getActi"eS#eet() !getCol%,n9i,ension(.C.) !setVisible(t$%e); $objPHPExcel !getActi"eS#eet() !getCol%,n9i,ension(.9.) !setVisible(&alse);
#.,.3<.
Para a rupar ; es7uema "e una columna/ pue"e utili(ar el c%"i o si uiente#
$objPHPExcel !getActi"eS#eet() !getCol%,n9i,ension(.E.) !set4%tlineLe"el(A);
>am)iKn pue"e contraer la columna. >en a en cuenta 7ue tam)iKn "e)e esta)lecer la columna invisi)le/ "e lo contrario la ca:"a no ser3 visi)le en Excel 2007.
$objPHPExcel !getActi"eS#eet() !getCol%,n9i,ension(.E.) !setCollapse((t$%e); $objPHPExcel !getActi"eS#eet() !getCol%,n9i,ension(.E.) !setVisible(&alse);
Por !avor re!iKrase a la parte = rupo ; es)o(ar una !ila= "e un e0emplo completo en el colapso.
P48>8 31>3/5: PHPEG/8= <5:5 5H5>3: 41 :874981 5 =5 >8:8/@5 (<0: >8I8/20). 0 @5/35 =5 3JK438:>5. El c%"i o si uiente a re a el resumen a la i(7uier"a#
$objPHPExcel !getActi"eS#eet() !setS#o2S%,,a$-Rig#t(&alse);
#.,.31.
#.,.32.
Para esta)lecer la &o0a "e c3lculo "e la visi)ili"a" "e una !ila/ pue"e utili(ar el c%"i o si uiente. El e0emplo si uiente se oculta la !ila nAmero 10.
$objPHPExcel !getActi"eS#eet() !getRo29i,ension(.A6.) !setVisible(&alse);
#.,.33.
37
>am)iKn pue"e contraer la !ila. >en a en cuenta 7ue tam)iKn "e)e esta)lecer la l:nea invisi)le/ "e lo contrario la ca:"a no ser3 visi)le en Excel 2007.
$objPHPExcel !getActi"eS#eet() !getRo29i,ension(.O.) !setCollapse((t$%e); $objPHPExcel !getActi"eS#eet() !getRo29i,ension(.O.) !setVisible(&alse);
$objPHPExcel !getActi"eS#eet() !getRo29i,ension($i) !set4%tlineLe"el(A); $objPHPExcel !getActi"eS#eet() !getRo29i,ension($i) !setVisible(&alse); + $objPHPExcel !getActi"eS#eet() !getRo29i,ension(?A) !setCollapse((t$%e);
Pue"e in"icar PHPExcel para a?a"ir a continuaci%n un resumen "e las !ilas ple a)les ,por "e!ecto+/ o superior. El c%"i o si uiente a re a el resumen anterior#
$objPHPExcel !getActi"eS#eet() !setS#o2S%,,a$-1elo2(&alse);
#.,.3#.
9i uste" tiene un pe"a(o ran"e "e "atos 7ue "esea mostrar en una &o0a "e c3lculo/ pue"e com)inar "os o m3s cKlulas 0untas/ para convertirse en una cKlula. Esto se pue"e &acer me"iante el si uiente c%"i o#
$objPHPExcel !getActi"eS#eet() !,e$geCells(.AA?:E55.);
#.,.3!.
Pue"e insertar o eliminar !ilas ; columnas en una posici%n espec:!ica. El c%"i o si uiente inserta "os nuevas !ilas/ 0usto antes "e la !ila 7#
$objPHPExcel !getActi"eS#eet() !inse$tVe2Ro21e&o$e(7:'5);
#.,.3,.
<n "i)u0o es siempre representa"o como un o)0eto in"epen"iente/ 7ue se pue"e a re ar a una &o0a "e c3lculo. Por lo tanto/ primero "e)e crear instancias "e un PHPExcel_Go$Hs#eet_9$a2ing' nueva/ - ce"er sus propie"a"es "e un valor si ni!icativo#
$obj9$a2ing'<'ne2'PHPExcel_Go$Hs#eet_9$a2ing(); $obj9$a2ing !setVa,e(.Logo.); $obj9$a2ing !set9esc$iption(.Logo.); $obj9$a2ing !setPat#(.*Ei,agesEo&&icelogo*jpg.);
3G
$obj9$a2ing !setHeig#t(U@);
Para a?a"ir el lo otipo "e la &o0a "e c3lculo/ utilice el si uiente !ra mento "e c%"i o. PHPExcel crea el v:nculo entre el "i)u0o - la &o0a "e c3lculo#
$obj9$a2ing !setGo$Hs#eet($objPHPExcel !getActi"eS#eet());
Pue"e esta)lecer las propie"a"es "e numerosas en un "i)u0o/ a7u: est3n al unos e0emplos#
$obj9$a2ing $obj9$a2ing $obj9$a2ing $obj9$a2ing $obj9$a2ing $obj9$a2ing $obj9$a2ing $obj9$a2ing !setVa,e(.Pai(.); !set9esc$iption(.Pai(.); !setPat#(.*Ei,agesEpai(*png.); !setCoo$(inates(.1AO.); !set4&&set8(AA6); !setRotation(5O); !getS#a(o2() !setVisible(t$%e); !getS#a(o2() !set9i$ection(RO);
#.,.38.
A"ici%n "e texto enri7ueci"o a una cKlula se pue"e &acer uso "e instancias PHPExcel_Ric#3ext*' He a7u: un e0emplo/ 7ue crea la rica ca"ena "e texto si uiente# Esta !actura se pa a dentro de los treinta d'as si&uientes al final del mes a menos 7ue se especi!i7ue lo contrario en la !actura.
$objRic#3ext'<'ne2'PHPExcel_Ric#3ext(); $objRic#3ext !c$eate3ext(.3#is'in"oice'is'.); $objPa-able'<'$objRic#3ext !c$eate3extR%n(.pa-able'2it#in't#i$t-'(a-s'a&te$'t#e'en(' o&'t#e',ont#.); $objPa-able !get=ont() !set1ol((t$%e); $objPa-able !get=ont() !setItalic(t$%e); $objPa-able !get=ont() !setColo$('ne2' PHPExcel_St-le_Colo$('PHPExcel_St-le_Colo$::C4L4R_9AR;cREEV')'); $objRic#3ext !c$eate3ext(.:'%nless'a',enos'K%e'se'especi&iK%e'lo'cont$a$io'en' la'&act%$a*'.); $objPHPExcel !getActi"eS#eet() !getCell(.AA?.) !setVal%e($objRic#3ext);
#.,.39.
HPExcel apo-a la "e!inici%n "e los ran os con nom)re. Estos se pue"en "e!inir me"iante el si uiente c%"i o# EE'Ag$ega$'alg%nos'(atos
$objPHPExcel $objPHPExcel $objPHPExcel $objPHPExcel $objPHPExcel !setActi"eS#eetIn(ex(6); !getActi"eS#eet() !setCellVal%e(.AA.:'.=i$stna,e:.); !getActi"eS#eet() !setCellVal%e(.A5.:'.Lastna,e:.); !getActi"eS#eet() !setCellVal%e(.1A.:'.0aa$ten.); !getActi"eS#eet() !setCellVal%e(.15.:'.1allia%2.);
EE'9e&ini$'$angos'con'no,b$e
$objPHPExcel !a((Va,e(Range('ne2'PHPExcel_Va,e(Range(.Pe$son=V.:'$objPHPExcel !getActi"eS#eet():'.1A.)'); $objPHPExcel !a((Va,e(Range('ne2'PHPExcel_Va,e(Range(.Pe$sonLV.:'$objPHPExcel !getActi"eS#eet():'.15.)');
3D
2pcionalmente/ un cuarto par3metro se pue"e pasar la "e!inici%n "el ran o con nom)re local ,es "ecir/ s%lo se pue"e usar en la &o0a "e c3lculo actual+. ran os con nom)re son lo)ales por "e!ecto.
#.,.3:.
A veces/ uno realmente 7uiere a la sali"a "e un arc&ivo en el nave a"or "el cliente/ especialmente cuan"o la creaci%n "e &o0as "e c3lculo so)re la marc&a. Ha- al unos pasos sencillos 7ue pue"e se uir para &acer esto#
4rear la &o0a "e c3lculo PHPExcel 9ali"a "e ca)eceras H>>P para el tipo "e "ocumento 7ue "esea a la sali"a <tilice el PHPExcel'Lriter' "e su elecci%n/ - uar"ar en =p&p# ;; sali"a=
PHPExcel'Lriter'Excel2007 utili(a almacenamiento temporal cuan"o se escri)e en p&p# ;; sali"a. De !orma pre"etermina"a/ los arc&ivos temporales se almacenan en el "irectorio "e tra)a0o "e ui%n. 4uan"o no &a- acceso/ se vuelve al sistema "e arc&ivos temporales "e u)icaci%n "e la explotaci%n.
Esto puede no ser se3ura para personas no autorizadasL Depen"ien"o "e la con!i uraci%n "e su sistema operativo/ el almacenamiento temporal pue"e ser le:"o por cual7uier persona 7ue utilice la carpeta "e almacenamiento temporal misma. L&en 4uan"o la con!i"enciali"a" "e su "ocumento es necesario/ se recomien"a no utili(ar p&p# ;; sali"a.
H>>P !eaders
E0emplo "e una secuencia "e coman"os re"iri ir un arc&ivo "e Excel 2007 para el nave a"or "el cliente#
DIp#p EQ'AK%g'#ab$L'algo'(e'cM(igo'(on(e'se'c$ea'objPHPExcel'QE EE'Re(i$igi$'la'sali(a'al'na"ega(o$'(el'cliente #ea(e$(.Content 3-pe:'applicationE"n(*openx,l&o$,ats o&&ice(oc%,ent*sp$ea(s#eet,l*s#eet.); #ea(e$(.Content 9isposition:'attac#,ent;&ilena,e</,-&ile*xlsx/.); #ea(e$(.Cac#e Cont$ol:',ax age<6.); $objG$ite$'<'PHPExcel_I4=acto$-::c$eateG$ite$($objPHPExcel:'.Excel5667.); $objG$ite$ !sa"e(.p#p:EEo%tp%t.);' I!
E0emplo "e una secuencia "e coman"os re"iri ir un arc&ivo Excel$ al cliente "el nave a"or "e la#
DIp#p EQ'AK%g'#ab$L'algo'(e'cM(igo'(on(e'se'c$ea'objPHPExcel'QE EE'Re(i$igi$'la'sali(a'al'na"ega(o$'(el'cliente #ea(e$(.Content 3-pe:'applicationE"n(*,s excel.); #ea(e$(.Content 9isposition:'attac#,ent;&ilena,e</,-&ile*xls/.); #ea(e$(.Cac#e Cont$ol:',ax age<6.); $objG$ite$'<'PHPExcel_I4=acto$-::c$eateG$ite$($objPHPExcel:'.ExcelO.); $objG$ite$ !sa"e(.p#p:EEo%tp%t.);' I!
40
Precauci%n# Ase Arese "e no incluir nin An eco "e las "eclaraciones o la sali"a "e cual7uier otro conteni"o 7ue el arc&ivo "e Excel. @o "e)e &a)er espacios en )lanco antes "e la apertura qE Eti7uetas p&p - m3s en un salto "e l:nea "espuKs "e la clausuraE` Eti7uetas ,7ue tam)iKn pue"e ser omiti"o para evitar pro)lemas+. Ase Arese "e 7ue la secuencia "e coman"os se uar"a sin una lista "e materiales ,marca "e or"en "e )-tes+. ,De)i"o a 7ue este cuenta como eco "e la sali"a+ lo mismo se aplica a to"os los arc&ivos inclui"os
@o se uir estas normas pue"e resultar en arc&ivos "e Excel corruptos lle ar al nave a"or "el cliente/ - ; o 7ue los enca)e(a"os no se pue"e esta)lecer por PHP ,7ue resulta en mensa0es "e a"vertencia+.
#.,.#<.
anc&o "e columna pre"etermina"o se pue"e con!i urar me"iante el si uiente c%"i o#
$objPHPExcel !getActi"eS#eet() !get9e&a%ltCol%,n9i,ension() !setGi(t#(A5);
#.,.#1.
"e alto "e !ila pre"etermina"o se pue"e con!i urar me"iante el si uiente c%"i o#
$objPHPExcel !getActi"eS#eet() !get9e&a%ltRo29i,ension() !setRo2Heig#t(AO);
#.,.#2.
Po"r:a &a)er una situaci%n en la 7ue "esea enerar una ima en "e memoria en el uso "e ]D a re arlo a una &o0a "e c3lculo PHPExcel sin tener 7ue uar"ar este arc&ivo en una u)icaci%n temporal. He a7u: un e0emplo 7ue enera una ima en en la memoria - lo a re a a la &o0a "e c3lculo activa# EE'cene$a$'%na'i,agen'
$g(I,age'<'hi,agec$eatet$%ecolo$(A56:'56)'o$'(ie(.Cannot'Initiali>e'ne2'c9'i,age' st$ea,.); $textColo$'<'i,agecolo$allocate($g(I,age:'5OO:'5OO:'5OO); i,agest$ing($g(I,age:'A:'O:'O:''.C$eate('2it#'PHPExcel.:'$textColo$); E'E'Aia(i$'%n'(ib%jo'(e'la'#oja'(e'cLlc%lo' $obj9$a2ing'<'ne2'PHPExcel_Go$Hs#eet_0e,o$-9$a2ing(); $obj9$a2ing !setVa,e(.Sa,ple'i,age.); $obj9$a2ing !set9esc$iption(.Sa,ple'i,age.); $obj9$a2ing !setI,ageReso%$ce($g(I,age); $obj9$a2ing !setRen(e$ing=%nction(PHPExcel_Go$Hs#eet_0e,o$-9$a2ing::REV9ERIVc_jPEc); $obj9$a2ing !set0i,e3-pe(PHPExcel_Go$Hs#eet_0e,o$-9$a2ing::0I0E3WPE_9E=ACL3); $obj9$a2ing !setHeig#t(U@); $obj9$a2ing !setGo$Hs#eet($objPHPExcel !getActi"eS#eet());
#.,.#3.
Para esta)lecer el nivel "e (oom "e una &o0a "e c3lculo/ el si uiente c%"i o se pue"e utili(ar#
$objPHPExcel !getActi"eS#eet() !getS#eetVie2() !setZoo,Scale(7O);
41
>en a en cuenta 7ue el nivel "e (oom "e)e estar en ran o "e 10 B 400.
#.,.##.
A veces se "esea esta)lecer un color "e !ic&a "e &o0a. Por e0emplo/ uste" pue"e tener una !ic&a "e &o0a ro0a#
$objGo$Hs#eet !get3abColo$() !setRc1(.==6666.);
#.,.#!.
Piense en create9&eet ,+ como la =&o0a .nsertar )ot%n en Excel. 4uan"o aprietas el )ot%n "e una &o0a nueva se a?a"e a la colecci%n existente "e las &o0as "el li)ro.
#.,.#,.
Esta)lecer una &o0a "e c3lculo 7ue se oculta me"iante este c%"i o#
$objPHPExcel !getActi"eS#eet() !setS#eetState(PHPExcel_Go$Hs#eet::SHEE3S3A3E_HI99EV);
Es posi)le 7ue uste" "esea 7ue la &o0a "e c3lculo a ser O&u/ ocultoO$ 5a &o0a "e esta"os "isponi)les son#
PHPExcel_Go$Hs#eet::SHEE3S3A3E_VISI1LE PHPExcel_Go$Hs#eet::SHEE3S3A3E_HI99EV PHPExcel_Go$Hs#eet::SHEE3S3A3E_VERWHI99EV
En el esta"o "e &o0a "e Excel =mu- oculto= s%lo se pue"e esta)lecer me"iante pro ramaci%n/ por e0emplo/ con 8isual Basic Macro. @o es posi)le &acer una &o0a visi)le a travKs "e la inter!a( "e usuario.
#.,.#8.
Ho0as "e c3lculo se pue"e a0ustar "e !orma in"ivi"ual si la columna =A= "e)e comen(ar en el la"o "erec&o o i(7uier"o. El valor pre"etermina"o es a la i(7uier"a. A7u: est3 c%mo con!i urar las columnas "e "erec&a a i(7uier"a. EE'A'la'i>K%ie$(a'#oja'(e'cLlc%lo'(e'la'(e$ec#a
$objPHPExcel !getActi"eS#eet() !setRig#t3oLe&t(t$%e);
42
!.
!.1.
4omo PHPExcel representa una &o0a "e c3lculo en la memoria/ sino 7ue tam)iKn o!rece capaci"a"es "e c3lculo "e la !%rmula. <na cel"a pue"e ser "e un tipo "e valor ,7ue contiene un nAmero o texto+/ o un tipo "e !%rmula ,7ue contiene una !%rmula 7ue pue"e ser evalua"o+. Por e0emplo/ la !%rmula =F 9<MA ,A1# A10+= se evalAa como la suma "e los valores en A1/ A2/ .../ A10. Para el c3lculo "e una !%rmula/ pue"e llamar a la cel"a 7ue contiene la !%rmula "el mKto"o "e la getCalc%late(Val%e (): por e0emplo#
$objPHPExcel !getActi"eS#eet() !getCell(.EAA.) !getCalc%late(Val%e();
9i uste" escri)e la si uiente l:nea "e c%"i o en la "emo !actura inclu-e con PHPExcel/ se evalAa como el valor =H4=#
2tra caracter:stica interesante "e la !%rmula anali(a"or "e PHPExcel/ es 7ue se pue"e a0ustar autom3ticamente una !%rmula para insertar ; eliminar !ilas ; columnas. He a7u: un e0emplo#
<ste" ve 7ue la !%rmula conteni"a en la cel"a E11 es =9<M ,E4# ED+=. A&ora/ cuan"o escri)o la si uiente l:nea "e c%"i o/ "os nuevas l:neas "e pro"uctos se a?a"en#
$objPHPExcel !getActi"eS#eet() !inse$tVe2Ro21e&o$e(7:'5);
43
p>e "iste cuentaE 5a !%rmula en la cel"a E11 ex ,a&ora E13/ -a 7ue a?a"e "os nuevas !ilas+/ &a cam)ia"o a =9<M ,E4# E11+=. A"em3s/ las cel"as inserta"as "uplicar la in!ormaci%n "e estilo "e la cel"a anterior/ al i ual 7ue el comportamiento "e Excel. >en a en cuenta 7ue am)os pue"en insertar !ilas - columnas.
!.2.
Limitaciones conocidas
Ha- al unas limitaciones conoci"as para el motor "e c3lculo PHPExcel. 5a ma-or:a "e ellos se "e)en al &ec&o "e 7ue una !%rmula "e Excel se convierte en c%"i o PHP antes "e ser e0ecuta"os. Esto si ni!ica 7ue la !%rmula "e c3lculo "e Excel est3 su0eto a las caracter:sticas "el len ua0e PHP.
!.2.1.
Precedencia de &peradores
E1 EG/8= LML E515 5 LNL. /090 LOL E515 <0/0 9A7 >8 LML 81 8= A=E8C:5 0:>315:35. L5 :8E=5 5128:30: 10 87 =0 K48 78 81/4812:5 423=3J51>0 8= 9020: >8 /A=/4=0 78 31/=4B8 /01 PHPEG/8=.
Petici%n "e prece"encia "e opera"ores en Excel# &ttp#;;support.microso!t.com;C);2$1GD &ttp#;;support.microso!t.com;C);2$1GD Petici%n "e prece"encia "e opera"ores en PHP# &ttp#;;www.p&p.net;operators &ttp#;;www.p&p.net;operators
!.2.2.
5as !%rmulas 7ue se usan nAmeros - el texto pue"e pro"ucir resulta"os inespera"os e incluso el conteni"o "el arc&ivo ile i)le. Por e0emplo/ la !%rmula =F 3 m= Hola =/= se espera 7ue pro"u(ca un error en Excel ,l r8A52OQ+. Due De)i"o al &ec&o "e 7ue PHP convierte =Hola= a un valor numKrico ,cero+/ el resulta"o "e esta !%rmula se evalAa como 3 en lu ar "e evaluar como un error. Esto tam)iKn &ace 7ue el "ocumento "e Excel 7ue se eneran como con conteni"o ile i)le. De re!erencia para este comportamiento en PHP## &ttp#;;)e.p&p.net;manual;en;lan ua e.t-pes.strin .p&pllan ua e.t-pes.strin .conversion
44
,.
4omo uste"es -a sa)en "e la parte 3.3 Oea"ers an" writers / 5os lectores - escritores / la lectura la escritura a un persiste almacenamiento no es posi)le utili(an"o la )ase "e clases PHPExcel. 4on este !in/ PHPExcel o!rece a los lectores - escritores/ 7ue son implementaciones "e PHPExcel'Lriter'.Oea"er - PHPExcel'Lriter'.Lriter.
,.1.
P$PE%celA(&"actory
5a AP. PHPExcel o!rece varios mKto"os para crear una instancia o PHPExcel'Lriter'.Lriter PHPExcel'Lriter'.Oea"er# 4reaci%n "irecta "e A travKs "e PHPExcel'.2Jactor-
>o"os los e0emplos "e)a0o "e "emostrar el mKto"o "e la creaci%n "irecta. >en a en cuenta 7ue tam)iKn pue"e utili(ar la clase PHPExcel'.2Jactor- para &acer esto.
$objPHPExcel'<'PHPExcel_I4=acto$-::loa((/6O&eat%$e(e,o*xlsx/);
<n uso t:pico "e esta !unci%n es cuan"o se necesita para leer los arc&ivos su)i"os por los usuarios/ no sK si se est3 car an"o xls o xlsx. 9i es necesario esta)lecer al unas propie"a"es en el lector ,por e0emplo/ para leer s%lo los "atos/ ver m3s so)re esto m3s a"elante+/ entonces en ve( 7ue "esee utili(ar esta variante#
$objRea(e$'<'PHPExcel_I4=acto$-::c$eateRea(e$=o$=ile(/6O&eat%$e(e,o*xlsx/); $objRea(e$ !setRea(9ata4nl-(t$%e); $objRea(e$ !loa((/6O&eat%$e(e,o*xlsx/);
Pue"e crear una instancia "e PHPExcel'Oea"er'.Oea"er utili(an"o PHPExcel'.2Jactor- en mo"o expl:cito con el si uiente e0emplo "e c%"i o#
$objRea(e$'<'PHPExcel_I4=acto$-::c$eateRea(e$(/Excel5667/); $objPHPExcel'<'$objRea(e$ !loa((/6O&eat%$e(e,o*xlsx/);
4$
>en a en cuenta 7ue el mo"o autom3tico "e tipo "e resoluci%n es li eramente m3s lento 7ue el mo"o expl:cito.
,.1.2.
,.2.
Excel2007 !ormato "e arc&ivo es el !ormato "e arc&ivo principal "e PHPExcel. Permite la sali"a "e la &o0a "e c3lculo en la memoria a un arc&ivo xlsx..
,.2.1.
P$PE%celAReaderAE%cel2<<8
Pue"e esta)lecer la opci%n setOea"Jilter en el lector/ para instruir al lector para car ar s%lo las cel"as 7ue coinci"en con una re la "a"a. <na lectura "el !iltro pue"e ser cual7uier clase 7ue implementa PHPExcel'Oea"er'.Oea"Jilter. Por "e!ecto/ to"as las cel"as se leen utili(an"o la PHPExcel'Oea"er'De!aultOea"Jilter. El si uiente c%"i o s%lo leer3 la !ila 1 - las !ilas 20 a 30 "e cual7uier &o0a en el arc&ivo "e Excel#
4H
class'0-Rea(=ilte$'i,ple,ents'PHPExcel_Rea(e$_IRea(=ilte$ ) p%blic'&%nction'$ea(Cell($col%,n:'$$o2:'$2o$Hs#eetVa,e'<'..)') EE'Rea('title'$o2'an('$o2s'56' 'U6 i&'($$o2'<<'A'kk'($$o2'!<'56'bb'$$o2'D<'U6))') $et%$n't$%e; + $et%$n'&alse; + + $objRea(e$'<'ne2'PHPExcel_Rea(e$_Excel5667(); $objRea(e$ !setRea(=ilte$('ne2'0-Rea(=ilte$()'); $objPHPExcel'<'$objRea(e$ !loa((/6@la$gescale*xlsx/);
,.2.2.
P$PE%celABriterAE%cel2<<8
Formula preGcalculation
De !orma pre"etermina"a/ este escritor preBcalcula to"as las !%rmulas "e la &o0a "e c3lculo. Esto pue"e ser lento en ran"es &o0as "e c3lculo/ - tal ve( no "esea"os/ incluso. Pue"e "esactivar la !%rmula sin em)ar o antes "e c3lculo#
$objG$ite$'<'ne2'PHPExcel_G$ite$_Excel5667($objPHPExcel); $objG$ite$ !setP$eCalc%late=o$,%las(&alse); $objG$ite$ !sa"e(/6O&eat%$e(e,o*xlsx/);
opci%n "e compati)ili"a" 2!!ice2003 s%lo "e)e utili(arse cuan"o sea necesario. Esta opci%n "es&a)ilita varias opciones "e !ormato "e arc&ivo 2!!ice2007/ resultan"o en una )a0a "e !unciones 2!!ice2007 &o0a "e c3lculo cuan"o se utili(a esta opci%n.
,.3.
arc&ivo en !ormato Excel$ es el anti uo arc&ivo en !ormato Excel/ implementa"o en PHPExcel para proporcionar "e manera uni!orme para crear am)os. xlsx -. xls. Es )3sicamente una versi%n mo"i!ica"a "e PEOA 9prea"s&eet'Excel'Lriter / - tiene las mismas limitaciones - caracter:sticas como la )i)lioteca PEAO.
47
Excel$ !ile !ormat will not )e "evelope" an- !urt&er/ it 0ust provi"es an a""itional !ile !ormat !or PHPExcel. 5:/@3?0 81 I0:9520 EG/8=# 10 78 >875::0==5:A 9A7 =8;07. 76=0 <:0<0:/3015 41
>en a en cuenta 7ue arc&ivo en !ormato B.JJ. tiene al unos l:mites en cuanto a las cKlulas "e estilo - mane0o "e ran"es &o0as "e c3lculo a travKs "e PHP.
,.3.1.
P$PE%celAReaderAE%cel!
4G
,.3.2.
P$PE%celABriterAE%cel!
,.#.
Excel 2003 !ormato "e arc&ivo 1M5 es un !ormato "e arc&ivo 7ue pue"e ser utili(a"o en las versiones anteriores "e Microso!t Excel.
Excel 200A )*+ li&itaciones >en a en cuenta 7ue Excel 2003 en !ormato 1M5 tiene al unas limitaciones con respecto a las cKlulas "e estilo - mane0o "e ran"es &o0as "e c3lculo a travKs "e PHP.
,.#.1.
P$PE%celAReaderAE%cel2<<3E.L
4D
,.!.
Enlace sim)%lico ,9N5R+ es un !ormato "e arc&ivo "e Microso!t suele utili(ar para el intercam)io "e "atos entre aplicaciones/ especialmente las &o0as "e c3lculo. 4ompuesto por A@9. caracteres 7ue pue"en visuali(arse solamente/ 7ue pue"e ser !3cilmente crea"os - procesa"os por otras aplicaciones/ como )ases "e "atos.
9N5R limitaciones
>en a en cuenta 7ue arc&ivo en !ormato 9N5R tiene al unos l:mites en cuanto a las cKlulas "e estilo - mane0o "e ran"es &o0as "e c3lculo a travKs "e PHP.
,.!.1.
P$PE%celAReaderACFLG
,.,.
498 ,valores separa"os por comas+ se utili(an a menu"o como una importaci%n ; !ormato "e arc&ivo "e exportaci%n con otros sistemas. PHPExcel allows rea"in an" writin to 498 !iles. PHPExcel permite leer - escri)ir en arc&ivos 498.
$0
#BV li&itaciones >en a en cuenta 7ue arc&ivo en !ormato 498 tiene al unos l:mites en cuanto a las cKlulas "e estilo/ !ormato "e nAmero/ ...
,.,.1.
P$PE%celAReaderA*CH
Lectura de un arc!i)o C H
<ste" pue"e leer un c%"i o. 4sv arc&ivo con lo si uiente#
$objRea(e$'<'ne2'PHPExcel_Rea(e$_CSV(); $objPHPExcel'<'$objRea(e$ !loa((/sa,ple*cs"/);
Marco C H opciones
A menu"o/ los arc&ivos 498 no son realmente =separa"os por comas=/ o punto - coma uso ,^+ como separa"or. Pue"e in"icar PHPExcel'Oea"er'498 al unas opciones antes "e leer un arc&ivo 498. >en a en cuenta 7ue PHPExcel'Oea"er'498 por "e!ecto asume 7ue la car a "el arc&ivo 498 es co"i!icaci%n <>JBG. 9i uste" est3 le-en"o arc&ivos 498 7ue !ueron crea"os en Microso!t 2!!ice Excel la co"i!icaci%n "e entra"a correcta - no pue"e ser Lin"owsB12$2 ,4P12$2+. Ase Arese siempre "e 7ue la co"i!icaci%n "e entra"a "e un valor apropia"o.
$objRea(e$'<'ne2'PHPExcel_Rea(e$_CSV(); $objRea(e$ !setInp%tEnco(ing(.CPA5O5.); $objRea(e$ !set9eli,ite$(.;.); $objRea(e$ !setEnclos%$e(..); $objRea(e$ !setLineEn(ing(/F$Fn/); $objRea(e$ !setS#eetIn(ex(6); $objPHPExcel'<'$objRea(e$ !loa((/sa,ple*cs"/);
$1
B.B.2.
PHPExcel-.riter-C H
Creacin de un arc!i)o C H
<ste" pue"e escri)ir un c%"i o csv. Arc&ivo con lo si uiente#
$objG$ite$'<'ne2'PHPExcel_G$ite$_CSV($objPHPExcel); $objG$ite$ !sa"e(/6O&eat%$e(e,o*cs"/);
Marco C H opciones
A menu"o/ los arc&ivos 498 no son realmente =separa"os por comas=/ o punto - coma uso ,^+ como separa"or. Pue"e in"icar PHPExcel'Lriter'498 al unas opciones antes "e escri)ir un arc&ivo 498#
$objG$ite$'<'ne2'PHPExcel_G$ite$_CSV($objPHPExcel); $objG$ite$ !set9eli,ite$(.;.); $objG$ite$ !setEnclos%$e(..); $objG$ite$ !setLineEn(ing(/F$Fn/); $objG$ite$ !setS#eetIn(ex(6); $objG$ite$ !sa"e(/6O&eat%$e(e,o*cs"/);
Frmula preGc7lculo
De !orma pre"etermina"a/ este escritor preBcalcula to"as las !%rmulas "e la &o0a "e c3lculo. Esto pue"e ser lento en ran"es &o0as "e c3lculo/ - tal ve( no "esea"os/ incluso. Pue"e "esactivar la !%rmula sin em)ar o antes "e c3lculo#
$objG$ite$'<'ne2'PHPExcel_G$ite$_CSV($objPHPExcel); $objG$ite$ !setP$eCalc%late=o$,%las(&alse); $objG$ite$ !sa"e(/6O&eat%$e(e,o*cs"/);
9i la &o0a "e c3lculo 7ue est3 exportan"o contiene nAmeros con separa"ores "e miles o "ecimales/ entonces "e)er:a pensar en lo 7ue los caracteres 7ue "esea utili(ar para los 7ue antes "e reali(ar la exportaci%n. De !orma pre"etermina"a PHPExcel )usca en la con!i uraci%n re ional "e la con!i uraci%n "el servi"or para "eci"ir 7uK caracteres a usar. Pero para evitar pro)lemas se recomien"a !i0ar los caracteres "e !orma expl:cita como se muestra a continuaci%n.
$2
<suarios .n lKs ten"r3 7ue usar esto antes "e &acer la exportaci%n#
$eK%i$e_once'.PHPExcelES#a$e(ESt$ing*p#p. PHPExcel_S#a$e(_St$ing::set9eci,alSepa$ato$(.*.); PHPExcel_S#a$e(_St$ing::set3#o%san(sSepa$ato$(.:.);
>en a en cuenta 7ue el c%"i o anterior esta)lece - mil separa"ores "ecimales como opciones lo)ales. Esto tam)iKn a!ecta la !orma en H>M5 - PDJ se exporta.
(.).
H*+L
PHPExcel le permite escri)ir una &o0a "e c3lculo en !ormato H>M5/ para la representaci%n r3pi"a "e los "atos en ella a cual7uier persona 7ue no tiene una &o0a "e c3lculo en su P4.
H:*+ li&itaciones >en a en cuenta 7ue arc&ivo en !ormato H>M5 tiene ciertos l:mites con respecto a las cKlulas "e estilo/ !ormato "e nAmero/ ...
B.+.1.
PHPExcel-.riter-H>ML
>en a en cuenta 7ue s%lo PHPExcel'Lriter'H>M5 salir la primera &o0a "e c3lculo "e !orma pre"etermina"a.
$3
Di,g'</'position:'$elati"e;'i>K%ie$(a:'6px;'top:'6px;'anc#o:'AR6px;' alt%$a:;'/s$c'</*'7?px'E'i,ages'E'logo*jpg'/bo$(e$'<'=0=`. <ste" pue"e utili(ar el c%"i o si uiente para lo rar este resulta"o#
$objG$ite$ !setI,agesRoot(.#ttp:EE222*exa,ple*co,.);
Formula preGcalculation
De !orma pre"etermina"a/ este escritor preBcalcula to"as las !%rmulas "e la &o0a "e c3lculoEsto pue"e ser lento en ran"es &o0as "e c3lculo/ - tal ve( no "esea"os/ incluso. Pue"e "esactivar la !%rmula sin em)ar o antes "e c3lculo#
$objG$ite$'<'ne2'PHPExcel_G$ite$_H30L($objPHPExcel); $objG$ite$ !setP$eCalc%late=o$,%las(&alse); $objG$ite$ !sa"e(/6O&eat%$e(e,o*#t,/);
Po"r:a &a)er una situaci%n en la 7ue "esea incrustar el c%"i o H>M5 enera"o en un sitio we) existente. PHPExcel'Lriter'H>M5 proporciona apo-o para enerar s%lo las partes espec:!icas "el c%"i o H>M5/ 7ue permite el uso "e estas pie(as en su sitio we). 9upporte" met&o"s# mKto"os compati)les# enerateH>M5Hea"er,+ enerate9t-les,+ enerate9&eetData,+ enerateH>M5Jooter,+
He a7u: un e0emplo 7ue recupera to"as las partes "e !orma in"epen"iente - los com)ina en una p3 ina H>M5 resultante#
DIp#p $objG$ite$'<'ne2'PHPExcel_G$ite$_H30L($objPHPExcel); ec#o'$objG$ite$ !gene$ateH30LHea(e$(); I! Dst-le! DB #t,l') ''&ont &a,il-:'3i,es'Ve2'Ro,an; ''&ont si>e:'Tpt; ''bacHg$o%n( colo$:'2#ite; + DIp#p ec#o'$objG$ite$ !gene$ateSt-les(&alse);'EE'(o'not'2$ite'Dst-le!'an('DEst-le! I! ! DEst-le! DIp#p ec#o'$objG$ite$ !gene$ateS#eet9ata(); ec#o'$objG$ite$ !gene$ateH30L=oote$(); I!
$4
(.,.
-./
PHPExcel le permite escri)ir una &o0a "e c3lculo en !ormato PDJ/ para la "istri)uci%n r3pi"a "e los "atos representa"os.
PD1 li&itaciones >en a en cuenta 7ue arc&ivo en !ormato PDJ tiene al unas limitaciones con respecto a las cKlulas "e estilo/ !ormato "e nAmero/ ...
B.C.1.
PHPExcel-.riter-PDF
>en a en cuenta 7ue s%lo PHPExcel'Lriter'PDJ salir la primera &o0a "e c3lculo "e !orma pre"etermina"a.
Formula preGcalculation
De !orma pre"etermina"a/ este escritor preBcalcula to"as las !%rmulas "e la &o0a "e c3lculo. Esto pue"e ser lento en ran"es &o0as "e c3lculo/ - tal ve( no "esea"os/ incluso Pue"e "esactivar la !%rmula sin em)ar o antes "e c3lculo#
$$
,.:. ?eneracin de archivos de E%cel a partir de plantillas 3leerI modi icar y escri+ir6
5os lectores - los escritores son las &erramientas 7ue le permiten enerar arc&ivos "e Excel a partir "e plantillas. >&is re7uires less co"in e!!ort t&an eneratin t&e Excel !ile !rom scratc&/ especialli! -our template &as man- st-les/ pa e setup properties/ &ea"ers etc. Esto re7uiere menos es!uer(o "e co"i!icaci%n 7ue enerar el arc&ivo "e Excel "es"e cero/ so)re to"o si la plantilla tiene muc&os estilos/ las propie"a"es "e con!i uraci%n "e p3 ina/ enca)e(a"os/ etc He a7u: un e0emplo "e c%mo a)rir un arc&ivo "e plantilla/ rellenar un par "e campos - uar"arlo "e nuevo#
$objPHPexcel'<'PHPExcel_I4=acto$-::loa((.te,plate*xlsx.); $objGo$Hs#eet'<'$objPHPexcel !getActi"eS#eet(); $objGo$Hs#eet !getCell(.AA.) !setVal%e(.jo#n.); $objGo$Hs#eet !getCell(.A5.) !setVal%e(.S,it#.); $objG$ite$'<'PHPExcel_I4=acto$-::c$eateG$ite$($objPHPexcel:'.ExcelO.); $objG$ite$ !sa"e(.2$ite*xls.);
>en a en cuenta 7ue se pue"e car ar un arc&ivo xlsx - enerar un arc&ivo xls. 4.
Cr2ditos
Please re!er to t&e internet pa e &ttp#;;www.co"eplex.com;PHPExcel;LiCi;8iew.aspxE titleF4re"itsIre!errin >itleFHome !or upBtoB"ate cre"its. Por !avor/ consulte la p3 ina "e .nternet &ttp#;;www.co"eplex.com;PHPExcel;LiCi;8iew.aspxEtitleF4re"itsIre!errin >itleFHome para actuali(ar la !ec&a "e crK"itos.
$H
8.
*r'ditos
Por !avor/ consulte la p3 ina "e .nternet &ttp#;;www.co"eplex.com;PHPExcel;LiCi;8iew.aspxE titleF4re"itsIre!errin >itleFHome para actuali(ar la !ec&a "e crK"itos.
$7
$G
PHPExcel_Bt/le_Ali3n&ent Arra- Ce-# &ori(ontal vertical rotation wrap s&rinC>oJit in"ent PHPExcel_Bt/le_Iu&-er1or&at Arra- Ce-# co"e PHPExcel_Bt/le_Protection Arra- Ce-# locCe" &i""en
Maps to propert-# setHori(ontal,+ set8ertical,+ set>extOotation,+ setLrap>ext,+ set9&rinC>oJit,+ set.n"ent,+ Maps to propert-# setJormat4o"e,+ Maps to propert-# set5ocCe",+ setHi""en,+
$D