Está en la página 1de 59

PHPExcel Documentacin para desarrolladores

Author: Maarten Balliauw


Version: 1.7.4
Date: 27 April 2011
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
BIBLIOTECA PCLZIP QUE SE INCLUYE CON PHPEXCEL. SEE THE FAQ SECTION OF THIS DOCUMENT ( 2.4.2 ) FOR DETAILS
ABOUT THIS. VEA LA SECCIN DE PREUNTAS 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. Tutoriaes ................................................................................................................................................ !
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 CONFIURACIN ............................................................................................................................. $4
".2.1. # amacenamiento en cach$ de una ceda ........................................................................................... 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 *aor de a ceda por coordenada ................................................................ 1+
".(.2. ,ecuperaci'n de una ceda de coordenadas ........................................................................................ 1+
".(.3. # esta)ecimiento de un *aor de ceda de a coumna - a fia .......................................................... 1+
".(.". ,ecuperaci'n de una ceda por coumna - fia .................................................................................... 1.
".(.(. Looping cedas ...................................................................................................................................... 1.
".(.6. /so de carpetas *aor para faciitar a entrada de datos ..................................................................... 1!
4.'. PHPEXCEL RECETAS ......................................................................................................................................... 20
".6.1. Marco de ho0a de ccuo de os metadatos de un ................................................................................ 21
".6.2. Marco acti*a de ho0a de una ho0a de ccuo ....................................................................................... 21
".6.3. #scri)e una fecha en una ceda ............................................................................................................ 21
".6.". #scri)ir una f'rmua en una ceda ....................................................................................................... 22
".6.(. &onfiguraci'n regiona para os preparados en .................................................................................. 22
".6.6. #scri)a un carcter de nue*a 2nea 34 n3 en una ceda 56t 7 #nter8 .................................................. 23
".6.+. #sta)e9ca e:p2citamente tipo de datos de una ceda .......................................................................... 2"
".6... &am)iar una ceda en una direcci'n /,L hacer cic en ...................................................................... 2"
".6.!. Marco orientaci'n de a pgina una ho0a de ccuo - e tama;o ....................................................... 2"
".6.11. &onfigurar pgina< #scaa 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 ccuo ..................................... 26
".6.1". Marco rompe a impresi'n en una fia o coumna .............................................................................. 2.
".6.1(. Mostrar u ocutar 2neas de di*isi'n de impresi'n cuando ................................................................ 2.
".6.16. Marco fias / coumnas a repetir en a parte superior / i9=uierda ...................................................... 2!
".6.1+. #specificar e rea de impresi'n ........................................................................................................ 2!
".6.1.. >ormato de cedas ............................................................................................................................... 2!
".6.1!. ?@mero de formatos ............................................................................................................................ 31
".6.21. 6ineaci'n - a0ustar e te:to ............................................................................................................... 31
PHPExcel Developer Documentation 2
".6.21. &onfiguraci'n de estio predeterminado de un i)ro ......................................................................... 32
".6.22. #stio )ordes de a ceda ..................................................................................................................... 32
".6.23. >ormato condiciona en una ceda ..................................................................................................... 33
".6.2". 6;ade un comentario a una ceda ...................................................................................................... 3"
".6.2(. 6picar autofitro a un rango de cedas .............................................................................................. 3"
".6.26. Aefinici'n de a seguridad en una ho0a de ccuo ............................................................................ 3"
".6.2+. Marco de *aidaci'n de datos en una ceda ....................................................................................... 3(
".6.2.. Marco coumna de ancho de una ....................................................................................................... 36
".6.2!. Mostrar u ocutar una coumna .......................................................................................................... 3+
".6.31. Brupo / es=uema de una coumna ...................................................................................................... 3+
".6.31. Marco fia a atura de un ................................................................................................................... 3+
".6.32. Mostrar u ocutar una fia ................................................................................................................... 3+
".6.33. Brupo / es)o9ar una fia ..................................................................................................................... 3+
".6.3". &om)inar / unmerge cedas ................................................................................................................ 3.
".6.3(. %nserci'n de fias / coumnas .............................................................................................................. 3.
".6.36. 6gregar un di)u0o a una ho0a de ccuo ........................................................................................... 3.
".6.3+. 6;adir te:to enri=uecido a una ceda ................................................................................................. 3!
".6.3.. Aefinir un rango con nom)re ............................................................................................................. 3!
".6.3!. ,edirigir a saida a a Ce) de na*egador de un ciente ................................................................... "1
".6."1. 60uste de ancho de coumna predeterminado .................................................................................... "1
".6."1. 60uste de a atura de a fia por defecto ............................................................................................. "1
".6."2. 6gregar un di)u0o a una ho0a de BA ................................................................................................. "1
".6."3. Marco ho0a de ccuo e ni*e de 9oom ............................................................................................. "1
".6."". Do0a de coor de ficha ......................................................................................................................... "2
".6."(. &rear ho0as de ccuo en un i)ro ..................................................................................................... "2
".6."6. Ocutos ho0as de ccuo 5ho0a de estados8 ........................................................................................ "2
".6."+. 6 i9=uierda ho0a de Aerecho .............................................................................................................. "2
5. REALIZACIN DE CLCULOS DE LA FRULA ............................................................................... 43
#.$. USANDO EL MOTOR DE C!LCULO PHPEXCEL ........................................................................................................ 4%
#.2. LIMITACIONES CONOCIDAS .................................................................................................................................. 44
(.2.1. Precedencia de Operadores .................................................................................................................. ""
(.2.2. Las f'rmuas =ue se usan n@meros - te:to ............................................................................................ ""
!. LECTURA " ESCRITURA DE ARCHIVOS ............................................................................................... 45
'.$. PHPEXCEL+IOFACTORY .................................................................................................................................. 4#
6.1.1. &rear PDP#:ceE,eaderE%,eader utii9ando PDP#:ceE%O>actor- ................................................. "(
6.1.2. &rear PDP#:ceEFriterE%Friter utii9ando PDP#:ceE%O>actor- .................................................... "6
'.2. EXCEL 2007 (SPREADSHEETML) FORMATO DE ARCHIVO ....................................................................................... 4'
6.2.1. PDP#:ceE,eaderE#:ce211+ ............................................................................................................. "6
6.2.2. PDP#:ceEFriterE#:ce211+ ............................................................................................................... "+
'.%. EXCEL # (BIFF) FORMATO DE ARCHIVO .............................................................................................................. 47
6.3.1. PDP#:ceE,eaderE#:ce( ................................................................................................................... ".
6.3.2. PDP#:ceEFriterE#:ce( ..................................................................................................................... "!
'.4. EXCEL 200% FORMATO DE ARCHIVO XML ......................................................................................................... 4,
6.".1. PDP#:ceE,eaderE#:ce2113XML ..................................................................................................... "!
'.#. ENLACE SIMBLICO (SYL*) ............................................................................................................................. #0
6.(.1. PDP#:ceE,eaderESGLH ..................................................................................................................... (1
'.'. CSV (VALORES SEPARADOS POR COMAS) ............................................................................................................. #0
6.6.1. PDP#:ceE,eaderE&SI ....................................................................................................................... (1
6.6.2. PDP#:ceEFriterE&SI ....................................................................................................................... (2
'.7. HTML ........................................................................................................................................................... #%
6.+.1. PDP#:ceEFriterEDTML .................................................................................................................... (3
'.-. PDF ............................................................................................................................................................... ##
6...1. PDP#:ceEFriterEPA> ....................................................................................................................... ((
'.,. ENERACIN DE ARCHIVOS DE EXCEL A PARTIR DE PLANTILLAS (LEER. MODIFICAR Y ESCRIBIR) .................................... #'
#. CR$DITOS ....................................................................................................................................................... 5#
APPENDI% A& CLAVES VLIDAS DE ATRIZ DE APPL"FROARRA" PARA ESTILO () .......... 5'
PHPExcel Developer Documentation 3
PHPExcel Developer Documentation 4
2. Requisitos previos
Requisitos de software
El siuiente 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 preuntas !recuentes "e este "ocumento , 2.4.2 + para
m3s "etalles so)re esto. PCLZip does hae 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. Las instrucciones de instalacin
5a instalaci%n es mu- !3cil# copiar el conteni"o "e la carpeta "e las clases a cual7uier luar
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#
;var;www;4lasses;PHPExcel.p&p
;var;www;4lasses;PHPExcel;4alculation.p&p
;var;www;4lasses;PHPExcel;4ell.p&p
...
2.2. Primeros pasos
<na )uena manera "e empe(ar es e0ecutar alunas "e las prue)as inclui"as en la "escara.
4opie el =Prue)as= carpeta al la"o "e su =4lases= carpeta "es"e arri)a por lo 7ue terminan con#
;var;www;>ests;01simple.p&p
;var;www;>ests;02t-pes.p&p
...
PHPExcel Developer Documentation $
Empiece a correr las prue)as/ se?alan"o su navea"or para 7ue los scripts "e prue)a#
&ttp#;;example.com;>ests;01simple.p&p
&ttp#;;example.com;>ests;02t-pes.p&p
...
@ota# Pue"e ser necesario mo"i!icar el incluir o re7uerir "eclaraciones al comien(o "e ca"a uno "e los scripts "e prue)a si su =4lases=
carpeta "e arri)a se llama "e otra manera.
2.3. Enlaces tiles y herramientas
Ha- alunos enlaces - &erramientas 7ue son mu- Atiles cuan"o se "esarrolla utili(an"o PHPExcel.
Please re!er to t&e PHPExcel 4o"ePlex paes !or an up"ate version o! t&e list )elow. Por !avor/
consulte la p3ina "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-lanFen &ttp#;;www.microso!t.com;"ownloa"s;"etails.aspxE
!amil-i"FD41)3470B3aeDB4aeeBG!43BcH))74c"14HHI"ispla-lanFen
"pen)*+ Pac.a3e Explorer "pen)*+ Explorador de pa2uetes
&ttp#;;www.co"eplex.com;PacCaeExplorer; &ttp#;;www.co"eplex.com;PacCaeExplorer;
2.3.2. Preguntas ms recuentes
El 1A4 &5s p53inas para PHPExcel se puede encontrar en
http:66000$codeplex$co&6PHPExcel6!i.i6Vie0$aspx7title81A49re(errin3:itle8Re2uire&ents $
Parece "ue !a# un pro$lema con la codi%icacin de caracteres ...
Es necesario el uso "e co"i!icaci%n <>JBG para to"os los textos en PHPExcel. ;( the script uses
di((erent encodin3 then it is possi-le to con%ert the texts 0ith PHP<s icon%=) (unction$ 9i la
secuencia "e coman"os utili(a la co"i!icaci%n "i!erentes/ entonces es posi)le convertir los textos
con los iconv ,+ "e PHP.PHP co&plains a-out >ipArchi%e not -ein3 (ound PHP se 7ue0a "e 7ue no
se encuentran 6ipArc&ive
PHP se "ue&a de "ue no se encuentran 'ip(rc!i)e
AseArese "e 7ue cumple to"os los re7uisitos/ especialmente la extensi%n p&p'(ip "e)e estar
&a)ilita"o.
5a clase 6ipArc&ive s%lo es necesario cuan"o la lectura o la escritura 7ue utili(an !ormatos "e
compresi%n 6ip ,excel2007 - 224alc+. 9ince version 1.7.H t&e P456ip li)rar- &as )een )un"le" wit&
PHPExcel as an alternative to t&e 6ipArc&ive class. Des"e la versi%n 1.7.H "e la )i)lioteca P456ip &a
si"o inclui"o con PHPExcel como una alternativa a la clase 6ipArc&ive.
Esto se pue"e activar llaman"o al#
PHPExcel Developer Documentation H
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+
Excel 2**+ no puede a$rir el arc!i)o ,enerado por PHPExcel-.riter-2**+ en
.indo/s

"Excel encontr contenido ilegible en '*. xlsx. Do you want to recover the contents o this
wor!boo!" #Desea recuperar el contenido de este libro" $ you trust the source o this wor!boo!%
clic! &es.' (i con)a en el origen de este libro% haga clic en () ".
Alunas versiones "e la extensi%n p&p'(ip en Lin"ows contiene un error al crear arc&ivos 6.P. >&e
version t&at can )e !oun" on &ttp#;;snaps.p&p.net;win32;p&p$.2Bwin32Blatest.(ip s&oul" worC at
all times. 5a versi%n 7ue se pue"e encontrar en &ttp#;;snaps.p&p.net;win32;p&p$.2Bwin32B
latest.(ip "e)en tra)a0ar en to"o momento.
Por otra parte/ la actuali(aci%n a lo menos - PHP $.2.D "e)er:a resolver el pro)lema.
9i no pue"e encontrar una copia limpia "e 6ipArc&ive/ entonces uste" pue"e utili(ar la )i)lioteca
P456ip como una alternativa al escri)ir excel2007 arc&ivos/ como se "escri)e anteriormente.
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%"io ,.9P lo permite+.
Alunos 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" memor-
usae !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 alunas 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 alunos "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.
Proteccin en mi !o&a de c7lculo no est7 %uncionando8
Al &acer uso "e cual7uiera "e las caracter:sticas "e protecci%n "e &o0a "e c3lculo ,por e0emplo/
amplia protecci%n "e las cKlulas/ 7ue pro&:)e eliminar !ilas/ ...+/ aseArese "e activar la seuri"a"
"e &o0a "e c3lculo. >&is can !or example )e "one liCe t&is# Esto pue"e &acerse/ por e0emplo/ as:#
PHPExcel Developer Documentation 7
$objPHPExcel!getActi"eS#eet()!getP$otection()!setS#eet(t$%e);
X caracter6stica no %unciona con PHPExcel-9eader-: / PHPExcel-.riter-'
@o to"as las caracter:sticas "e PHPExcel se aplican en to"os los ; ra)a"or "e clases Oea"er. >&is is
mostl- "ue to un"erl-in li)raries not supportin a speci!ic !eature or not &avin implemente" a
speci!ic !eature. Esto se "e)e principalmente a las )i)liotecas su)-acente no apo-ar una
caracter:stica espec:!ica o no &a)er aplica"o una caracter:stica espec:!ica.
Por e0emplo Auto!iltro no est3 implementa"a en PEOA 9prea"s&eet'Excel'writer/ 7ue es la )ase "e
nuestro escritor Excel$.
Poco a poco estamos crean"o una lista "e caracter:sticas/ 0unto con los "i!erentes lectores -
escritores 7ue los apo-an/ en la =!uncionali"a" "e la 4ru(BOe!erence.xls= arc&ivo en la carpeta "e
"ocumentaci%n ;.
Las %rmulas no parecen ser calculado en el uso de pa"uete de compati$ilidad
Excel2**38
Este es un comportamiento normal "el pa7uete "e compati)ili"a"/ excel2007 muestra esto
correctamente. ?se PHPExcel_!riter_Excel@ i( /ou reall/ need calculated %alues or (orce
recalculation in Excel200A$ PHPExcel'Lriter'Excel$ utili(ar si realmente necesita los valores
calcula"os/ o "e c3lculo viente en Excel2003.
Esta$lecimiento del anc!o de columna no es %ia$le al 1**;
>ratar "e esta)lecer el anc&o "e columna/ un pro)lema "e experiencia. L&en . open t&e !ile in
Excel/ t&e actual wi"t& is 0.71 less t&an it s&oul" )e. 4uan"o a)ro el arc&ivo en Excel/ el anc&o real
es "e 0/71 menos "e lo 7ue "e)er:a ser.
5a respuesta corta es 7ue PHPExcel utili(a una me"i"a "on"e se inclu-e el relleno. Bee section:
CBettin3 a colu&n<s 0idthD (or &ore details$ 8ea la secci%n# =Marco columna "e un anc&o= para
o)tener m3s "etalles.
<Cmo puedo usar con mi PHPExcel marco
Ha- alunas instrucciones para el uso "e PHPExcel con Poomla en el Joro "e PoomlaQ
A pae o! a"vice on usin PHPExcel in t&e Nii !rameworC <na p3ina "e conse0os so)re el uso "e
PHPExcel en el marco Nii
>&e BaCer- &as some &elper classes !or rea"in an" writin wit& PHPExcel wit&in 4aCePHP 5a
pana"er:a tiene alunas clases "e a-u"a para la lectura - la escritura con PHPExcel en 4aCePHP
.nteratin PHPExcel into Ro&ana &ttp#;;www.!l-nsarm-.com;2010;07;p&pexcelBmo"uleB!orB
Co&anaB3; an" STUVWXYZ[\ PHPExcel [ Ro&ana JrameworC 5a interaci%n "e PHPExcel en Ro&ana
&ttp#;;www.!l-nsarm-.com;2010;07;p&pexcelBmo"uleB!orBCo&anaB3; - STUVWXYZ[\ PHPExcel [
Ro&ana JrameworC
<sin PHPExcel wit& >-po3 <san"o PHPExcel con >-po3
=oomla autocar,ador inter%iere con PHPExcel autocar,ador
>&anCs to peterrl-nc& !or t&e !ollowin a"vice on resolvin issues )etween t&e PHPExcel autoloa"er
an" Poomla Autoloa"er ]racias a peterrl-nc& "e los siuientes conse0os so)re cuestiones resolver
entre el cara"or - el cara"or autom3tico PHPExcel Poomla
PHPExcel Developer Documentation G
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
PHPExcel Developer Documentation D
3. (r"uitectura
3.1. Esquemtica
3.2. Lazy Loader
PHPExcel implementa un autocara"or o =estor "e pere(oso=/ lo 7ue sini!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 cara"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 cara 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 cara autom3tica/ entonces esto pue"e ser
so)reescrito por la !unci%n "e cara autom3tica PHPExcel. Jor example/ i! -ou &ave# Por e0emplo/ si
uste" tiene#
&%nction __a%toloa(($class) )
***
+
Haa esto en su luar#
&%nction ,-A%toloa(($class) )
***
+
spl_a%toloa(_$egiste$(.,-A%toloa(.);
9u cara"or autom3tico a continuaci%n/ se coBexistir con el cara"or autom3tico "e PHPExcel.
3.3. Spreadsheet(Hoja de Calculo) en eoria
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
sini!ica 7ue/ si uno 7uiere crear un punto "e vista )asa"o en we)/ "e una &o0a "e c3lculo 7ue se
PHPExcel Developer Documentation 10
comunica con el mo"elo "e o)0etos "e PHPExcel/ s%lo ten"r:a 7ue escri)ir el !inal "el c%"io "e
!rente.
Al iual 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/ im3enes/ ...
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 alunos 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.
PHPExcel Developer Documentation 11
3.!. "luido interaces
PHPExcel soporta inter!aces "e !lui"e( en la ma-or:a "e luares.
Esto sini!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 sini!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 siuiente c%"io#
$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/);
PHPExcel Developer Documentation 12
$objPHPExcel!getP$ope$ties()!setCatego$-(/3est $es%lt &ile/);
Esto pue"e ser reescrita como#
$objPHPExcel!getP$ope$ties()
!setC$eato$(/0aa$ten 1allia%2/)
!setLast0o(i&ie(1-(/0aa$ten 1allia%2/)
!set3itle(/4&&ice 5667 8LS8 3est 9oc%,ent/)
!setS%bject(/4&&ice 5667 8LS8 3est 9oc%,ent/)
!set9esc$iption(/3est (oc%,ent &o$ 4&&ice 5667 8LS8: gene$ate( %sing
PHP classes*/)
!set;e-2o$(s(/o&&ice 5667 openx,l p#p/)
!setCatego$-(/3est $es%lt &ile/);
?tilizaci'n de inter(aces con (luidez no es necesario
inter!aces "e Jluent se &an implementa"o para proporcionar una proramaci%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)liatorio/ pero pue"e &acer 7ue su c%"io sea m3s !3cil "e leer - mantener.
PHPExcel Developer Documentation 13
?. #reaci'n de una spreadsheet=HoHa de calculo)
#.1. La clase P$PE%cel
5a clase PHPExcel es el nAcleo "e PHPExcel. 4ontiene re!erencias a las &o0as "e c3lculo 7ue !iura/
en el "ocumento la con!iuraci%n "e seuri"a" - meta "atos "el "ocumento.
Para simpli!icar el concepto PHPExcel# la clase PHPExcel representa el li)ro.
#.2. &pciones de coniguracin
<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 carar un arc&ivo "e li)ro/ &a- una serie "e opciones "e con!iuraci%n 7ue se
pue"e esta)lecer 7ue a!ectar3n el comportamiento posterior "e la secuencia "e coman"os.
#.2.1. El almacenamiento en cach' de una celda
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 luar "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'9ettins## set4ac&e9toraeMet&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!iuraci%n 7ue &a con!iura"o. <ste" no pue"e cam)iar los
a0ustes "e con!iuraci%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 siuientes.
PHPExcel'4ac&e"2)0ect9toraeJactor-##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)0ect9toraeJactor-##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)recara "e
PHPExcel Developer Documentation 14
ren"imiento m:nimo.
PHPExcel'4ac&e"2)0ect9toraeJactor-##cac&e'in'memor-'(ip^
Al iual 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)0ect9toraeJactor-##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 sini!icativamente
el consumo "e memoria.
El arc&ivo "e "isco temporal se elimina autom3ticamente cuan"o el script !inali(a.
PHPExcel'4ac&e"2)0ect9toraeJactor-##cac&e'to'p&p>emp^
Al iual 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&ane 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)0ect9toraeJactor-##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 seun"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)0ect9toraeJactor-##cac&e'to'memcac&e
PHPExcel Developer Documentation 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 seun"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)0ect9toraeJactor-##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 seun"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. (dioma ) *oniguracin regional
Alunos elementos "e locali(aci%n &an si"o inclui"os en PHPExcel. Pue"e esta)lecer una
con!iuraci%n reional al cam)iar la con!iuraci%n. Para esta)lecer la con!iuraci%n reional "e
portuuKs "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 portuuKs "e Brasil no est3n "isponi)les/ a continuaci%n/ los portuueses
se &a)ilitar3 en su luar# si la lenua portuuesa arc&ivos no est3n "isponi)les/ entonces el setlocale
,+ mKto"o "evolver3 un error/ - el .nlKs Americano ,es'es+ con!iuraci%n se utili(a en to"o. M3s
"etalles "e las !unciones "isponi)les una ve( a la con!iuraci%n reional se &a esta)leci"o/ inclui"a
una lista "e los i"iomas - las con!iuraciones reionales compati)les actualmente/ se encuentra en
la secci%n 4.$.$ 5ocale 9ettins !or Jormulae . 4on!iuraci%n reional para los prepara"os .
PHPExcel Developer Documentation 1H
#.3. Eliminacin de un li+ro de la memoria
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/ im3enes/ 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 alunas "e las opciones para acce"er a una cel"a.
#.!.1. El esta+lecimiento de un valor de la celda por coordenada
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. Recuperacin de una celda de coordenadas
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 siuiente l:nea
"e c%"io#
$objPHPExcel!getActi"eS#eet()!getCell(.1?.)!getVal%e();
9i uste" necesita el valor calcula"o "e una cel"a/ utilice el siuiente c%"io. Esto se explica en
4.4.3$ .
$objPHPExcel!getActi"eS#eet()!getCell(.1?.)!getCalc%late(Val%e();
#.!.3. El esta+lecimiento de un valor de celda de la columna y la ila
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.);
PHPExcel Developer Documentation 17
#.!.#. Recuperacin de una celda por columna y ila
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 siuiente l:nea "e c%"io#
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 siuiente c%"io. 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
Loopin, c2ldas utili5ando iteradores
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:
EE A%nK%e no estL estableci(a*
EE 9e &o$,a p$e(ete$,ina(a:
sMlo las cJl%las
EE N%e estLn a %no se
EE Ite$a*
&o$eac# ($cellIte$ato$ as $cell) )
ec#o .Dt(!. * $cell!getVal%e() * .DEt(!. * /Fn/;
+

ec#o .DEt$!. * /Fn/;
+
ec#o .DEtable!. * /Fn/;
I!
>ena 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.
PHPExcel Developer Documentation 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.
Aucle de c2lulas por medio de 6ndices
9e pue"e utili(ar la posi)ili"a" "e acce"er a los valores "e cel"a - la !ila "e :n"ice "e columna
como ,0/1+ en luar "e MA1M para leer - escri)ir valores "e las cel"as en )ucles.
@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 sini!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!
#.!.,. -so de carpetas valor para acilitar la entrada de datos
.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
siuiente se muestra c%mo esta)lecer la carpeta "e valor en PHPExcel#
EQQ PHPExcel QE
$eK%i$e_once .PHPExcel*p#p.;
PHPExcel Developer Documentation 1D
EQQ PHPExcel_Cell_A("ance(Val%e1in(e$ QE
$eK%i$e_once .PHPExcelECellEA("ance(Val%e1in(e$*p#p.;
EQQ PHPExcel_I4=acto$- QE
$eK%i$e_once .PHPExcelEI4=acto$-*p#p.;
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
$objPHPExcel!getActi"eS#eet()!setCellVal%e(.AO.: .9ateEti,e "al%e:.);
$objPHPExcel!getActi"eS#eet()!setCellVal%e(.1O.: .5A 9ece,be$ AT?U.);
EE Con"ie$te a la &ec#a - establece el &o$,ato (e &ec#a estilo (e cel(a
+a creaci'n de su propio %alor a3lutinante es (5cil$
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 siuientes p3inas le o!recemos alunas recetas utili(an PHPExcelBampliamente. >ena 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 pae orientation an" si(e covers settin a pae orientation
to A4. Marco "e orientaci%n "e la p3ina - el tama?o "e una &o0a "e c3lculo a)arca esta)lecer una
orientaci%n "e p3ina 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. .arco de ho/a de clculo de los metadatos de un
PHPExcel permite una manera !3cil "e con!iurar 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 siuiente 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/);
PHPExcel Developer Documentation 20
#.,.2. .arco activa de ho/a de una ho/a de clculo
5a siuiente l:nea "e c%"io esta)lece el :n"ice "e &o0a activa a la primera &o0a#
$objPHPExcel!setActi"eS#eetIn(ex(6);
#.,.3. Escri+e una echa en una celda
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%"io. 9eleccione el mKto"o
7ue m3s le convena me0or. He a7u: alunos 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.;
EECo,o la &ec#a - #o$a 0-SNL .566?A5UA .
PHPExcel_Cell::setVal%e1in(e$( ne2 PHPExcel_Cell_A("ance(Val%e1in(e$() );
$objPHPExcel!getActi"eS#eet()!setCellVal%e(.9A.: .566?A5UA.)
$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 PHPtie,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%"io 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 loner 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.
PHPExcel Developer Documentation 21
#.,.#. Escri+ir una rmula en una celda
Dentro "el arc&ivo "e Excel/ las !%rmulas siempre se almacenan como aparecer:an en una versi%n en
.nlKs "e Microso!t 2!!ice Excel/ - PHPExcel mane0a to"as las !%rmulas internamente en este
!ormato. Esto sini!ica 7ue las siuientes relas espera#
separa"or "ecimal es M.M ,perio"+ ,Per:o"o+
Junction arument separator is M/M ,comma+ arumento "e separaci%n "e !unciones es =/=
,coma+
Matrix row separator is M^M ,semicolon+ !ila separa"or "e Matrix es =/= ,coma+
Enlis& !unction names must )e use" !unci%n "e los nom)res "e .nlKs "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 encarar3 "e mostrar la !%rmula
seAn la lenua aplicaciones. >ranslation is taCen care o! )- t&e applicationQ 5a tra"ucci%n es a
caro "e la aplicaci%nQ
5a siuiente l:nea "e c%"io escri)e la !%rmula =F 9. ,44` $00/= lucro =/= pKr"i"a =+= en la cel"a BG..
>ena 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 siuiente l:nea "e c%"io#
$&o$,%la < $objPHPExcel!getActi"eS#eet()!getCell(.1?.)!getVal%e();
9i uste" necesita el valor calcula"o "e una cel"a/ utilice el siuiente c%"io. Esto se explica en
4.4.3$ .
$"al%e < $objPHPExcel!getActi"eS#eet()!getCell(.1?.)!getCalc%late(Val%e();
#.,.!. *oniguracin regional para los preparados en
Alunos elementos "e locali(aci%n &an si"o inclui"os en PHPExcel. Pue"e esta)lecer una
con!iuraci%n reional al cam)iar la con!iuraci%n. Para esta)lecer la con!iuraci%n reional "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!iuraci%n "e .nlKs se utili(ar3 en to"as partes.
<na ve( 7ue &a-a esta)leci"o una con!iuraci%n reional/ pue"e tra"ucir una !%rmula "e su interior
.nlKs 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);
PHPExcel Developer Documentation 22
>am)iKn pue"e crear una !%rmula 7ue utili(a los nom)res "e !unci%n - separa"ores "e arumentos
apropia"os para la con!iuraci%n reional "e!ini"a/ - lueo tra"ucirlo al .nlKs 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 arumento "e la !unci%n.
En la actuali"a"/ la con!iuraci%n reional se a"miten los siuientes#
+an3ua3e +ocale #ode
4(ec& aebtina 4s
Danis& DansC Da
]erman Deutsc& De
9panis& Espa?ol Es
Jinnis& 9uomi Ji
Jrenc& Jrancais Jr
Hunarian Ma-ar Hu
.talian .taliano .t
Dutc& @e"erlan"s @l
@orweian @orsC @o
Polis& Pd(-C polsCi Pl
Portuuese Portuues pt
Bra(ilian Portuuese Portuues Brasileiro pt')r
Oussian Xfggh[i \jkh ru
9we"is& 9vensCa 9v
#.,.,. Escri+a un carcter de nueva l0nea 12 n1 en una celda 34lt 5 Enter6
En Microso!t 2!!ice Excel 7ue conseuir 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 lorar 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 luar.
: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
iual 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.
PHPExcel Developer Documentation 23
?.B.+. Esta$le5ca expl6citamente tipo de datos de una celda
Pue"e con!iurar 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. Cam$iar una celda en una direccin D9L !acer clic en
<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 orientacin de la p7,ina una !o&a de c7lculo # el tama1o
Marco orientaci%n "e la p3ina una &o0a "e c3lculo - el tama?o se pue"e &acer utili(an"o las
siuientes l:neas "e c%"io#
$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);
>ena en cuenta 7ue existen opciones a"icionales "e p3inas "isponi)les. Por !avor/ consulte la
"ocumentaci%n "e la AP. para to"as las opciones posi)les.
?.B.1*. Con%i,urar p7,ina0 Escala de opciones
5as opciones "e con!iuraci%n "e p3ina "e escala en PHPExcel se relacionan "irectamente con las
opciones "e escala en la secci%n =4on!iurar p3ina= "e "i3loo 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
PHPExcel Developer Documentation 24
,et#o( initial "al%e calling ,et#o( 2ill
t$igge$
Vote
set=it3oPage(***) &alse
setScale(***) A66 set=it3oPage(&alse)
set=it3oGi(t#(***) A set=it3oPage(t$%e) "al%e 6 ,eans
(onot&itto
2i(t#
set=it3oHeig#t(***) A set=it3oPage(t$%e) "al%e 6 ,eans
(onot&itto
#eig#t
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. >ena 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 m3renes "e p3ina "e una &o0a "e c3lculo/ utilice el c%"io#
PHPExcel Developer Documentation 2$
$objPHPExcel!getActi"eS#eet()!getPage0a$gins()!set3op(A);
$objPHPExcel!getActi"eS#eet()!getPage0a$gins()!setRig#t(6*7O);
$objPHPExcel!getActi"eS#eet()!getPage0a$gins()!setLe&t(6*7O);
$objPHPExcel!getActi"eS#eet()!getPage0a$gins()!set1otto,(A);
>ena en cuenta 7ue los valores "e los m3renes se especi!ican en pula"as.
#.,.12. *entro de una pgina hori7ontal ) vertical
Para centrar una p3ina &ori(ontal ; vertical/ pue"e utili(ar el c%"io siuiente#
$objPHPExcel!getActi"eS#eet()!getPageSet%p()!setHo$i>ontalCente$e((t$%e);
$objPHPExcel!getActi"eS#eet()!getPageSet%p()!setVe$ticalCente$e((&alse);
#.,.13. 4/uste de la ca+ecera y pie de pgina de impresin de una ho/a
de clculo
Marco &o0a "e impresi%n "e un enca)e(a"o - pie "e p3ina se pue"e &acer utili(an"o las siuientes
l:neas "e c%"io#
$objPHPExcel!getActi"eS#eet()!getHea(e$=oote$()!set4((Hea(e$(.bCbHPlease t$eat
t#is (oc%,ent as con&i(entialB.);
$objPHPExcel!getActi"eS#eet()!getHea(e$=oote$()!set4((=oote$(.bLb1. *
$objPHPExcel!getP$ope$ties()!get3itle() * .bRPage bP o& bV.);
9ustituci%n - c%"ios "e !ormato ,a partir "e -+ se pue"e utili(ar "entro "e los enca)e(a"os - pies
"e p3ina. @o &a- un or"en necesario en el 7ue estos c%"ios "e)en aparecer.
5a primera aparici%n "e los siuientes c%"ios convierte el !ormato 2@/ la seun"a aparici%n
convierte 2JJ "e nuevo#
9triCet&rou& >ac&a"o
9uperscript 9o)rescrito
9u)script 9u):n"ice
PHPExcel Developer Documentation 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%"ios siuientes son compati)les con excel2007#
&L
4%"io "e la =secci%n "e la i(7uier"a= ,&a- tres "e ca)ecera -
locali"a"es "e pie "e p3ina/ 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.
&P
4%"io "e la =p3ina actual l=
&N
4%"io "e =p3inas totales=
&font size
4%"io para =el tama?o "e !uente "e texto=/ "on"e el tama?o "e la
!uente es un tama?o "e !uente en puntos.
&K
4%"io "e =color "e la !uente "e texto=
J O]B color se especi!ica como OO]]BB
J >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.
&S
4%"io para =tac&a"o "e texto= on ; o!!
&X
4%"io para =super script "e texto= on ; o!!
&Y
4o"e !or =text su)script= on ; o!! 4%"io para =el texto en su):n"ice=
on ; o!!
&C
4%"io "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.
&D
4%"io para la =!ec&a=
&T
4%"io para el =tiempo=
&G
4%"io para la =imaen "e !on"o=
Por !avor/ aseArese "e arear la imaen a la ca)ecera ; pie "e
p3ina#
$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);
&U
4%"io "e =solo texto su)ra-a"o=
&E
4%"io "e la ="o)le su)ra-a"o=
&R
4%"io "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.
&Z
4%"io para =la ruta "el arc&ivo "e este li)ro=
&F
4%"io para =nom)re "e arc&ivo "e este li)ro=
&
4%"io "e la =!ic&a nom)re "e la &o0a=
&!
4%"io para arear a la p3ina l
&"
4%"io "e restar "e la p3ina l
PHPExcel Developer Documentation 27
&#font n$%e&font t'(e#
4%"io 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 sini!ica =no
especi!ica"o=. Am)os nom)re "e la !uente - el tipo "e !uente pue"e
ser valores locali(a"os.
&#"&)old#
4%"io para la =nerita=
&)
4%"io para la =nerita=
&#"&Re*+l$r#
4%"io "e =estilo "e !uente reular=
&#"&,t$li-#
4%"io "e =estilo "e !uente cursiva=
&,
4%"io "e =estilo "e !uente cursiva=
&#"&)old ,t$li-#
4%"io para =cursiva nerita=
&.
4%"io "e =estilo "e es7uema=
&/
4%"io "e =estilo "e som)ra=
:ip
5a ta)la "e arri)a "e los c%"ios pue"e parecer a)ruma"ora primera ve( 7ue est3 tratan"o "e encontrar la
manera "e escri)ir alunas "e ca)ecera o pie "e p3ina. 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 p3ina como "esee usan"o los proramas "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 siuiente 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%"ios para la par ; impar enca)e(a"o - pie "e p3ina. 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%"ios "e
enca)e(a"o - pie "e p3ina.
#.,.1#. .arco rompe la impresin en una ila o columna
Para esta)lecer un "escanso "e impresi%n/ utilice el siuiente c%"io/ 7ue esta)lece un "escanso "e
!ila en !ila 10.
$objPHPExcel!getActi"eS#eet()!set1$eaH( .AA6. : PHPExcel_Go$Hs#eet::1REA;_R4G );
5a siuiente l:nea "e c%"io esta)lece un "escanso "e impresi%n en la columna D#
$objPHPExcel!getActi"eS#eet()!set1$eaH( .9A6. :
PHPExcel_Go$Hs#eet::1REA;_C4LC0V );
#.,.1!. .ostrar u ocultar l0neas de divisin de impresin cuando
Para mostrar ; ocultar l:neas "e "ivisi%n al imprimir/ utilice el siuiente c%"io#
$objPHPExcel!getActi"eS#eet()!setS#o2c$i(lines(t$%e);
PHPExcel Developer Documentation 2G
#.,.1,. .arco ilas ) columnas a repetir en la parte superior ) i7quierda
PHPExcel pue"e repetir !ilas espec:!icas ; las cKlulas en la parte superior e i(7uier"a "e una p3ina.
El c%"io siuiente es un e0emplo "e c%mo repetir la !ila 1 a $ en ca"a p3ina impresa "e una &o0a
"e c3lculo espec:!ica#
$objPHPExcel!getActi"eS#eet()!getPageSet%p()
!setRo2s3oRepeatAt3op1-Sta$tAn(En((A: O);
#.,.18. Especiicar el rea de impresin
Para especi!icar la &o0a "e c3lculo "e 3rea "e impresi%n/ utilice el siuiente c%"io#
$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 - nero. 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()!get3op()
!set1o$(e$St-le(PHPExcel_St-le_1o$(e$::14R9ER_3HIC;);
$objPHPExcel!getActi"eS#eet()!getSt-le(.15.)!get1o$(e$s()!get1otto,()
!set1o$(e$St-le(PHPExcel_St-le_1o$(e$::14R9ER_3HIC;);
$objPHPExcel!getActi"eS#eet()!getSt-le(.15.)!get1o$(e$s()!getLe&t()
!set1o$(e$St-le(PHPExcel_St-le_1o$(e$::14R9ER_3HIC;);
$objPHPExcel!getActi"eS#eet()!getSt-le(.15.)!get1o$(e$s()!getRig#t()
!set1o$(e$St-le(PHPExcel_St-le_1o$(e$::14R9ER_3HIC;);
$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 rano "e cel"as como un par3metro. Por
e0emplo/ pue"e esta)lecer un !on"o "e color ro0o en un rano "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.
PHPExcel Developer Documentation 2D
>am)iKn &a- una !orma alternativa para esta)lecer estilos. El c%"io siuiente "e!ine el estilo "e
una cKlula "e nerita/ alineaci%n "erec&a/ )or"e superior "ela"o - un relleno "e "era"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-);
2 con un rano "e cel"as#
$objPHPExcel!getActi"eS#eet()!getSt-le(.1U:17.)!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!iurar 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
rano "e cel"as/ pero este mKto"o &a 7ue"a"o en "esuso "es"e et9t-le ,+ &a comen(a"o a
aceptar un rano "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 "i3loo. A7u: &a- alunos !ormatos pre"e!ini"os nAmero "isponi)le
inclu-en"o alunas "e las !ec&as. El "i3loo est3 "ise?a"o "e una manera para 7ue uste" no tiene
7ue interactuar con el nAmero "e c%"io 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);
PHPExcel Developer Documentation 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!iuraci%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 conseuir 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%"ios numKricos siempre 7ue uste" necesite alunos "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
lonitu" !i0a#
$objPHPExcel!getActi"eS#eet()!getCell(.AA.)!setVal%e(AT);
$objPHPExcel!getActi"eS#eet()!getSt-le(.AA.)!getV%,be$=o$,at()
!set=o$,atCo(e(.6666.); EE 2ill s#o2 as 66AT in Excel
:ip
5as relas para componer un c%"io "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%"io "el !ormato su)-acente parece.p4%mo lo encontrasteE
5os lectores env:an con PHPExcel venir al rescate. 4arue su plantilla "e li)ro usan"o/ por e0emplo
excel2007 lector a revelar el c%"io "e !ormato "e nAmero. E0emplo "e como leer un c%"io "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%"io "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%"io 1M5 "e explotaci%n/ el c%"io "e !ormato "e nAmero en xl
styles.xml.
#.,.2<. 4lineacin y a/ustar el te%to
8amos a con!iurar 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);
A7u: es c%mo lorar a0ustar el texto#
$objPHPExcel!getActi"eS#eet()!getSt-le(.AA:9R.)
!getAlign,ent()!setG$ap3ext(t$%e);
PHPExcel Developer Documentation 31
#.,.21. *oniguracin del estilo predeterminado de un li+ro
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. Estilo +ordes de la celda
En PHPExcel es !3cil "e aplicar "i!erentes !ronteras en una selecci%n rectanular. 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 "i3loo "e estilo/ la elecci%n "e un )or"e ro0o - espeso/ -
&acer clic en el es7uema =componente "e la !rontera=.
>ena en cuenta 7ue las l:neas !ronteri(as se aplica a la selecci%n rectanular B2# "el ]BG en
su con0unto/ no en ca"a cKlula in"ivi"ual.
<ste" pue"e lorar 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/ *aps to propert/
le!t
ri&t
top
)ottom
"iaonal
et5e!t,+
etOi&t,+
et>op,+
etBottom,+
etDiaonal,+
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/ *aps to propert/
all)or"ers
outline
insi"e
vertical
&ori(ontal
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 siuiente
PHPExcel Developer Documentation 32
imaen#
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 siuiente# all)or"ers/ contorno ; interior/ vertical - &ori(ontal/ i(7uier"a ; "erec&a ; arri)a ;
a)a0o ; "iaonal.
Esta 0erar7u:a "e la !rontera pue"e ser utili(a"a para lorar e!ectos "i!erentes "e una manera
!3cil.
#.,.23. "ormato condicional en una celda
<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 relas "e estilo con"icional a una cel"a usan"o el siuiente
c%"io#
$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);
PHPExcel Developer Documentation 33
$objPHPExcel!getActi"eS#eet()!getSt-le(.15.)
!setCon(itionalSt-les($con(itionalSt-les);
9i "esea copiar el con0unto "e relas 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#. 4=ade un comentario a una celda
Para arear un comentario a una cel"a/ utilice el siuiente c%"io. El e0emplo siuiente area 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!. 4plicar autoiltro a un rango de celdas
Para aplicar un Auto!iltro a un rano "e cel"as/ utilice el siuiente c%"io#
$objPHPExcel!getActi"eS#eet()!setA%to=ilte$(.AA:CT.);
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,. >einicin de la seguridad en una ho/a de clculo
Excel o!rece 3 niveles "e =protecci%n=# seuri"a" "e los "ocumentos/ &o0as "e seuri"a" - la
seuri"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 &aan cam)ios s%lo cuan"o se intro"u(ca la contrase?a.
Ho0a "e seuri"a" o!rece otras opciones "e seuri"a"# pue"e no permitir la inserci%n "e
!ilas en una &o0a espec:!ica/ la clasi!icaci%n no permitir/ ...
PHPExcel Developer Documentation 34
la seuri"a" "e la cKlula o!rece la opci%n "e )lo7uear ; "es)lo7uear un celular/ as: como
mostrar ; ocultar la !%rmula interna
<n e0emplo so)re seuri"a" "e los "ocumentos "e a0uste#
$objPHPExcel!getSec%$it-()!setLocHGin(o2s(t$%e);
$objPHPExcel!getSec%$it-()!setLocHSt$%ct%$e(t$%e);
$objPHPExcel!getSec%$it-()!setGo$HbooHPass2o$((/PHPExcel/);
<n e0emplo "e &o0a "e c3lculo "e con!iuraci%n "e seuri"a"#
$objPHPExcel!getActi"eS#eet()!getP$otection()!setPass2o$((.PHPExcel.);
$objPHPExcel!getActi"eS#eet()!getP$otection()!setS#eet(t$%e);
$objPHPExcel!getActi"eS#eet()!getP$otection()!setSo$t(t$%e);
$objPHPExcel!getActi"eS#eet()!getP$otection()!setInse$tRo2s(t$%e);
$objPHPExcel!getActi"eS#eet()!getP$otection()!set=o$,atCells(t$%e);
<n e0emplo "e con!iuraci%n "e seuri"a" "e cKlulas#
$objPHPExcel!getActi"eS#eet()!getSt-le(.1A.)!getP$otection()!setLocHe((
PHPExcel_St-le_P$otection::PR43EC3I4V_CVPR43EC3E9
);
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 siuiente c%"io n o)0PHPExcelB`# etActive9&eet ,+ B`
etProtection ,+ B` set9&eet ,ver"a"ero+
#.,.28. .arco de validacin de datos en una celda
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 siuiente !ramento "e c%"io 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 siuiente !ramento "e c%"io s%lo permite un elemento selecciona"o "e una lista "e "atos 7ue
"e)en !iurar en la cel"a B3#
$objVali(ation < $objPHPExcel!getActi"eS#eet()!getCell(.1O.)
!get9ataVali(ation();
PHPExcel Developer Documentation 3$
$objVali(ation!set3-pe( PHPExcel_Cell_9ataVali(ation::3WPE_LIS3 );
$objVali(ation!setE$$o$St-le( PHPExcel_Cell_9ataVali(ation::S3WLE_IV=4R0A3I4V );
$objVali(ation!setAllo21lanH(&alse);
$objVali(ation!setS#o2Inp%t0essage(t$%e);
$objVali(ation!setS#o2E$$o$0essage(t$%e);
$objVali(ation!setS#o29$op9o2n(t$%e);
$objVali(ation!setE$$o$3itle(.Inp%t e$$o$.);
$objVali(ation!setE$$o$(.Val%e is not in list*.);
$objVali(ation!setP$o,pt3itle(.PicH &$o, list.);
$objVali(ation!setP$o,pt(.Please picH a "al%e &$o, t#e ($op(o2n list*.);
$objVali(ation!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/ aseArese "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 alunos rano "e cel"as/ por
e0emplo A1# A3/ - en luar "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 relas#
$objPHPExcel!getActi"eS#eet()!getCell(.1?.)!set9ataVali(ation(clone
$objVali(ation);
#.,.29. .arco columna del ancho de una
<n anc&o "e columna se pue"e esta)lecer me"iante el siuiente c%"io#
$objPHPExcel!getActi"eS#eet()!getCol%,n9i,ension(.9.)!setGi(t#(A5);
9i "esea PHPExcel para reali(ar un c3lculo autom3tico "e anc&o/ utilice el siuiente c%"io.
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+
PHPExcel Developer Documentation 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 "esracia/ *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 "i3loos - 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 alAn 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:. .ostrar u ocultar una columna
Para esta)lecer la &o0a "e c3lculo "e la visi)ili"a" "e una columna/ pue"e utili(ar el c%"io
siuiente. 5a primera l:nea muestra expl:citamente la columna 4/ la seun"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<. ?rupo ) esquema de una columna
Para arupar ; es7uema "e una columna/ pue"e utili(ar el c%"io siuiente#
$objPHPExcel!getActi"eS#eet()!getCol%,n9i,ension(.E.)!set4%tlineLe"el(A);
>am)iKn pue"e contraer la columna. >ena 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%"io siuiente area el resumen a la i(7uier"a#
$objPHPExcel!getActi"eS#eet()!setS#o2S%,,a$-Rig#t(&alse);
#.,.31. .arco ila la altura de un
<na !ila "e la altura se pue"e a0ustar me"iante el siuiente c%"io#
$objPHPExcel!getActi"eS#eet()!getRo29i,ension(.A6.)!setRo2Heig#t(A66);
#.,.32. .ostrar u ocultar una ila
Para esta)lecer la &o0a "e c3lculo "e la visi)ili"a" "e una !ila/ pue"e utili(ar el c%"io siuiente. El
e0emplo siuiente se oculta la !ila nAmero 10.
$objPHPExcel!getActi"eS#eet()!getRo29i,ension(.A6.)!setVisible(&alse);
#.,.33. ?rupo ) es+o7ar una ila
PHPExcel Developer Documentation 37
Para arupar ; es)o(ar una !ila/ pue"e utili(ar el c%"io siuiente#
$objPHPExcel!getActi"eS#eet()!getRo29i,ension(.O.)!set4%tlineLe"el(A);
>am)iKn pue"e contraer la !ila. >ena 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);
He a7u: un e0emplo 7ue se "esploma !ilas $0 a G0#
&o$ ($i < OA; $i D< ?6; $iPP) )
$objPHPExcel!getActi"eS#eet()!setCellVal%e(.A. * $i: /=Va,e $i/);
$objPHPExcel!getActi"eS#eet()!setCellVal%e(.1. * $i: /LVa,e $i/);
$objPHPExcel!getActi"eS#eet()!setCellVal%e(.C. * $i: /P#oneVo $i/);
$objPHPExcel!getActi"eS#eet()!setCellVal%e(.9. * $i: /=axVo $i/);
$objPHPExcel!getActi"eS#eet()!setCellVal%e(.E. * $i: t$%e);
$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 plea)les ,por "e!ecto+/
o superior. El c%"io siuiente area el resumen anterior#
$objPHPExcel!getActi"eS#eet()!setS#o2S%,,a$-1elo2(&alse);
#.,.3#. *om+inar ) unmerge celdas
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
siuiente c%"io#
$objPHPExcel!getActi"eS#eet()!,e$geCells(.AA?:E55.);
Extracci%n "e una !usi%n se pue"e &acer usan"o el mKto"o %n,e$geCells:
$objPHPExcel!getActi"eS#eet()!%n,e$geCells(.AA?:E55.);
#.,.3!. (nsercin de ilas ) columnas
Pue"e insertar o eliminar !ilas ; columnas en una posici%n espec:!ica. El c%"io siuiente inserta "os
nuevas !ilas/ 0usto antes "e la !ila 7#
$objPHPExcel!getActi"eS#eet()!inse$tVe2Ro21e&o$e(7: 5);
#.,.3,. 4gregar un di+u/o a una ho/a de clculo
<n "i)u0o es siempre representa"o como un o)0eto in"epen"iente/ 7ue se pue"e arear 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 sini!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.);
PHPExcel Developer Documentation 3G
$obj9$a2ing!setHeig#t(U@);
Para a?a"ir el lootipo "e la &o0a "e c3lculo/ utilice el siuiente !ramento "e c%"io. 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 alunos e0emplos#
$obj9$a2ing!setVa,e(.Pai(.);
$obj9$a2ing!set9esc$iption(.Pai(.);
$obj9$a2ing!setPat#(.*Ei,agesEpai(*png.);
$obj9$a2ing!setCoo$(inates(.1AO.);
$obj9$a2ing!set4&&set8(AA6);
$obj9$a2ing!setRotation(5O);
$obj9$a2ing!getS#a(o2()!setVisible(t$%e);
$obj9$a2ing!getS#a(o2()!set9i$ection(RO);
#.,.38. 4=adir te%to enriquecido a una celda
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 siuiente#
Esta !actura se paa 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. >einir un rango con nom+re
HPExcel apo-a la "e!inici%n "e los ranos con nom)re. Estos se pue"en "e!inir me"iante el siuiente
c%"io#
EE Ag$ega$ alg%nos (atos
$objPHPExcel!setActi"eS#eetIn(ex(6);
$objPHPExcel!getActi"eS#eet()!setCellVal%e(.AA.: .=i$stna,e:.);
$objPHPExcel!getActi"eS#eet()!setCellVal%e(.A5.: .Lastna,e:.);
$objPHPExcel!getActi"eS#eet()!setCellVal%e(.1A.: .0aa$ten.);
$objPHPExcel!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.) );
PHPExcel Developer Documentation 3D
2pcionalmente/ un cuarto par3metro se pue"e pasar la "e!inici%n "el rano con nom)re local ,es
"ecir/ s%lo se pue"e usar en la &o0a "e c3lculo actual+. ranos con nom)re son lo)ales por "e!ecto.
#.,.3:. Redirigir la salida a la @e+ del navegador de un cliente
A veces/ uno realmente 7uiere a la sali"a "e un arc&ivo en el navea"or "el cliente/ especialmente
cuan"o la creaci%n "e &o0as "e c3lculo so)re la marc&a. Ha- alunos pasos sencillos 7ue pue"e
seuir 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!iuraci%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"iriir un arc&ivo "e Excel 2007 para el navea"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$(.Content3-pe: applicationE"n(*openx,l&o$,ats
o&&ice(oc%,ent*sp$ea(s#eet,l*s#eet.);
#ea(e$(.Content9isposition: attac#,ent;&ilena,e</,-&ile*xlsx/.);
#ea(e$(.Cac#eCont$ol: ,axage<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"iriir un arc&ivo Excel$ al cliente "el navea"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$(.Content3-pe: applicationE"n(*,sexcel.);
#ea(e$(.Content9isposition: attac#,ent;&ilena,e</,-&ile*xls/.);
#ea(e$(.Cac#eCont$ol: ,axage<6.);
$objG$ite$ < PHPExcel_I4=acto$-::c$eateG$ite$($objPHPExcel: .ExcelO.);
$objG$ite$!sa"e(.p#p:EEo%tp%t.);
I!
PHPExcel Developer Documentation 40
Precauci%n#
AseArese "e no incluir ninAn 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+.
AseArese "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 seuir estas normas pue"e resultar en arc&ivos "e Excel corruptos llear al navea"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+.
#.,.#<. 4/uste del ancho de columna predeterminado
anc&o "e columna pre"etermina"o se pue"e con!iurar me"iante el siuiente c%"io#
$objPHPExcel!getActi"eS#eet()!get9e&a%ltCol%,n9i,ension()!setGi(t#(A5);
#.,.#1. 4/uste de la altura de la ila por deecto
"e alto "e !ila pre"etermina"o se pue"e con!iurar me"iante el siuiente c%"io#
$objPHPExcel!getActi"eS#eet()!get9e&a%ltRo29i,ension()!setRo2Heig#t(AO);
#.,.#2. 4gregar un di+u/o a una ho/a de ?>
Po"r:a &a)er una situaci%n en la 7ue "esea enerar una imaen "e memoria en el uso "e ]D -
arearlo 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 imaen en la memoria - lo area 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. .arco ho/a de clculo el nivel de 7oom
Para esta)lecer el nivel "e (oom "e una &o0a "e c3lculo/ el siuiente c%"io se pue"e utili(ar#
$objPHPExcel!getActi"eS#eet()!getS#eetVie2()!setZoo,Scale(7O);
PHPExcel Developer Documentation 41
>ena en cuenta 7ue el nivel "e (oom "e)e estar en rano "e 10 B 400.
#.,.##. $o/a de color de icha
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.);
#.,.#!. *rear ho/as de clculo en un li+ro
9i necesita crear m3s &o0as "el li)ro/ a7u: es c%mo#
$objGo$Hs#eetA < $objPHPExcel!c$eateS#eet();
$objGo$Hs#eetA!set3itle(.Anot#e$ s#eet.);
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.
#.,.#,. &cultos ho/as de clculo 3ho/a de estados6
Esta)lecer una &o0a "e c3lculo 7ue se oculta me"iante este c%"io#
$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 proramaci%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. 4 i7quierda ho/a de >erecho
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!iurar 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);
PHPExcel Developer Documentation 42
!. Reali7acin de clculos de la rmula
!.1. -sando el motor de clculo P$PE%cel
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 siuiente l:nea "e c%"io 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
siuiente l:nea "e c%"io/ "os nuevas l:neas "e pro"uctos se a?a"en#
$objPHPExcel!getActi"eS#eet()!inse$tVe2Ro21e&o$e(7: 5);
PHPExcel Developer Documentation 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 iual 7ue el comportamiento "e Excel. >ena en cuenta 7ue am)os pue"en
insertar !ilas - columnas.
!.2. Limitaciones conocidas
Ha- alunas 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%"io PHP antes "e ser e0ecuta"os. Esto
sini!ica 7ue la !%rmula "e c3lculo "e Excel est3 su0eto a las caracter:sticas "el lenua0e 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. Las rmulas que se usan nmeros y te%to
5as !%rmulas 7ue se usan nAmeros - el texto pue"e pro"ucir resulta"os inespera"os e incluso el
conteni"o "el arc&ivo ilei)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 luar "e evaluar como un error. Esto
tam)iKn &ace 7ue el "ocumento "e Excel 7ue se eneran como con conteni"o ilei)le.
De re!erencia para este comportamiento en PHP##
&ttp#;;)e.p&p.net;manual;en;lanuae.t-pes.strin.p&pllanuae.t-pes.strin.conversion
PHPExcel Developer Documentation 44
,. Lectura y escritura de archivos
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. >ena en cuenta 7ue
tam)iKn pue"e utili(ar la clase PHPExcel'.2Jactor- para &acer esto.
,.1.1. *rear P$PE%celAReaderA(Reader utili7ando
P$PE%celA(&"actory
Ha- "os mKto"os para la lectura "e un arc&ivo en PHPExcel# el uso "e tipo "e arc&ivo autom3tico "e
resolver o expl:citamente.
tipo "e arc&ivo autom3tico "e la resoluci%n "e los "i!erentes controles PHPExcel'Oea"er'.Oea"er
"istri)ui"o con PHPExcel. 9i uno "e ellos pue"e carar el nom)re "e arc&ivo especi!ica"o/ el arc&ivo
se cara con 7ue PHPExcel'Oea"er'.Oea"er. mo"o expl:cito re7uiere 7ue se especi!i7ue 7ue
PHPExcel'Oea"er'.Oea"er "e)e ser utili(a"o.
Pue"e crear una instancia "e PHPExcel'Oea"er'.Oea"er utili(an"o PHPExcel'.2Jactor- en el tipo "e
arc&ivo autom3tico "e resolver el mo"o "e utili(ar el e0emplo "e c%"io#
$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 caran"o xls o xlsx.
9i es necesario esta)lecer alunas 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 siuiente e0emplo "e c%"io#
$objRea(e$ < PHPExcel_I4=acto$-::c$eateRea(e$(/Excel5667/);
$objPHPExcel < $objRea(e$!loa((/6O&eat%$e(e,o*xlsx/);
PHPExcel Developer Documentation 4$
>ena en cuenta 7ue el mo"o autom3tico "e tipo "e resoluci%n es lieramente m3s lento
7ue el mo"o expl:cito.
,.1.2. *rear P$PE%celABriterA(Briter utili7ando P$PE%celA(&"actory
Pue"e crear una instancia "e PHPExcel'Lriter'.writer utili(an"o PHPExcel'.2Jactor-#
$objG$ite$ < PHPExcel_I4=acto$-::c$eateG$ite$($objPHPExcel: /Excel5667/);
$objG$ite$!sa"e(/6O&eat%$e(e,o*xlsx/);
,.2. E%cel 2<<8 3Cpreadsheet.L6 ormato de archivo
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
Lectura de una !o&a de c7lculo
<ste" pue"e leer un c%"io "e xlsx. Arc&ivo con lo siuiente#
$objRea(e$ < ne2 PHPExcel_Rea(e$_Excel5667();
$objPHPExcel < $objRea(e$!loa((/6O&eat%$e(e,o*xlsx/);
los datos de slo lectura
Pue"e con!iurar la opci%n setOea"Data2nl- en el lector/ para instruir al lector a pasar por alto el
estilo/ la vali"aci%n "e "atos/ ... - aca)a "e leer "atos "e la cel"a#
$objRea(e$ < ne2 PHPExcel_Rea(e$_Excel5667();
$objRea(e$!setRea(9ata4nl-(t$%e);
$objPHPExcel < $objRea(e$!loa((/6O&eat%$e(e,o*xlsx/);
espec6%icas de las !o&as de slo lectura
Pue"e con!iurar la opci%n set5oa"9&eets2nl- en el lector/ para instruir al lector para carar s%lo
las &o0as con un nom)re 7ue se "a#
$objRea(e$ < ne2 PHPExcel_Rea(e$_Excel5667();
$objRea(e$!setLoa(S#eets4nl-( a$$a-(/S#eet A/: /0- special s#eet/) );
$objPHPExcel < $objRea(e$!loa((/6O&eat%$e(e,o*xlsx/);
espec6%icas de las c2lulas de slo lectura
Pue"e esta)lecer la opci%n setOea"Jilter en el lector/ para instruir al lector para carar s%lo las
cel"as 7ue coinci"en con una rela "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 siuiente c%"io s%lo leer3 la !ila 1 - las !ilas 20 a 30 "e cual7uier &o0a en el arc&ivo "e Excel#
PHPExcel Developer Documentation 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
Escri$ir una !o&a de c7lculo
<ste" pue"e escri)ir un c%"io xlsx. Arc&ivo con lo siuiente#
$objG$ite$ < ne2 PHPExcel_G$ite$_Excel5667($objPHPExcel);
$objG$ite$!sa"e(/6O&eat%$e(e,o*xlsx/);
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)aro 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/);
Pa"uete de compati$ilidad de O%%ice 2**3
De)i"o a un )u en el pa7uete "e compati)ili"a" 2!!ice2003/ pue"e &a)er alunos pe7ue?os
pro)lemas al a)rir excel2007 &o0as "e c3lculo ,en su ma-or:a relaciona"os con c3lculo "e la
!%rmula+. Pue"e permitir la compati)ili"a" 2!!ice2003 con el siuiente c%"io#
$objG$ite$ < ne2 PHPExcel_G$ite$_Excel5667($objPHPExcel);
$objG$ite$!set4&&ice566UCo,patibilit-(t$%e);
$objG$ite$!sa"e(/6O&eat%$e(e,o*xlsx/);
compati)ili"a" 2!!ice2003 s%lo "e)e utili(arse cuan"o sea necesario
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. E%cel ! 3D(""6 ormato de archivo
arc&ivo en !ormato Excel$ es el antiuo 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.
PHPExcel Developer Documentation 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
I0:9520 >8 5:/@3?0 5>3/3015=87 <5:5 PHPEG/8=.
Excel$ ,B.JJ+ limitations Excel$ ,B.JJ+ limitaciones
>ena en cuenta 7ue arc&ivo en !ormato B.JJ. tiene alunos 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!
Lectura de una !o&a de c7lculo
<ste" pue"e leer el c%"io. 1ls con lo siuiente#
$objRea(e$ < ne2 PHPExcel_Rea(e$_ExcelO();
$objPHPExcel < $objRea(e$!loa((/6O&eat%$e(e,o*xls/);
los datos de slo lectura
Pue"e con!iurar la opci%n setOea"Data2nl- en el lector/ para instruir al lector a pasar por alto el
estilo/ la vali"aci%n "e "atos/ ... - aca)a "e leer "atos "e la cel"a#
$objRea(e$ < ne2 PHPExcel_Rea(e$_ExcelO();
$objRea(e$!setRea(9ata4nl-(t$%e);
$objPHPExcel < $objRea(e$!loa((/6O&eat%$e(e,o*xls/);
espec6%icas de las !o&as de slo lectura
Pue"e con!iurar la opci%n set5oa"9&eets2nl- en el lector/ para instruir al lector para carar s%lo
las &o0as con un nom)re 7ue se "a#
$objRea(e$ < ne2 PHPExcel_Rea(e$_ExcelO();
$objRea(e$!setLoa(S#eets4nl-( a$$a-(/S#eet A/: /0- special s#eet/) );
$objPHPExcel < $objRea(e$!loa((/6O&eat%$e(e,o*xls/);
espec6%icas de las c2lulas de slo lectura
Pue"e esta)lecer la opci%n setOea"Jilter en el lector/ para instruir al lector para carar s%lo las
cel"as 7ue coinci"en con una rela "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 siuiente c%"io s%lo leer3 la !ila 1 - las !ilas 20 a 30 "e cual7uier &o0a en el arc&ivo "e Excel#
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;
+
PHPExcel Developer Documentation 4G
+
$objRea(e$ < ne2 PHPExcel_Rea(e$_ExcelO();
$objRea(e$!setRea(=ilte$( ne2 0-Rea(=ilte$() );
$objPHPExcel < $objRea(e$!loa((/6@la$gescale*xls/);
,.3.2. P$PE%celABriterAE%cel!
Escri$ir una !o&a de c7lculo
<ste" pue"e escri)ir un c%"io. 1ls con lo siuiente#
$objG$ite$ < ne2 PHPExcel_G$ite$_ExcelO($objPHPExcel);
$objG$ite$!sa"e(/6O&eat%$e(e,o*xls/);
,.#. E%cel 2<<3 "ormato de archivo E.L
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
>ena en cuenta 7ue Excel 2003 en !ormato 1M5 tiene alunas 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
Lectura de una !o&a de c7lculo
<ste" pue"e leer el c%"io 1M5. Arc&ivo con lo siuiente#
$objRea(e$ < ne2 PHPExcel_Rea(e$_Excel566U80L();
$objPHPExcel < $objRea(e$!loa((/6O&eat%$e(e,o*x,l/);
espec6%icas de las c2lulas de slo lectura
Pue"e esta)lecer la opci%n setOea"Jilter en el lector/ para instruir al lector para carar s%lo las
cel"as 7ue coinci"en con una rela "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 siuiente c%"io s%lo leer3 la !ila 1 - las !ilas 20 a 30 "e cual7uier &o0a en el arc&ivo "e Excel#
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;
+
PHPExcel Developer Documentation 4D
+
$objRea(e$ < ne2 PHPExcel_Rea(e$_Excel566U80L();
$objRea(e$!setRea(=ilte$( ne2 0-Rea(=ilte$() );
$objPHPExcel < $objRea(e$!loa((/6@la$gescale*x,l/);
,.!. Enlace sim+lico 3CFLG6
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
>ena en cuenta 7ue arc&ivo en !ormato 9N5R tiene alunos l:mites en cuanto a las cKlulas "e
estilo - mane0o "e ran"es &o0as "e c3lculo a travKs "e PHP.
,.!.1. P$PE%celAReaderACFLG
Lectura de una !o&a de c7lculo
<ste" pue"e leer un c%"io "e slC. Arc&ivo con lo siuiente#
$objRea(e$ < ne2 PHPExcel_Rea(e$_SWL;();
$objPHPExcel < $objRea(e$!loa((/6O&eat%$e(e,o*slH/);
espec6%icas de las c2lulas de slo lectura
Pue"e esta)lecer la opci%n setOea"Jilter en el lector/ para instruir al lector para carar s%lo las
cel"as 7ue coinci"en con una rela "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 siuiente c%"io s%lo leer3 la !ila 1 - las !ilas 20 a 30 "e cual7uier &o0a en el arc&ivo 9N5R#
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$_SWL;();
$objRea(e$!setRea(=ilte$( ne2 0-Rea(=ilte$() );
$objPHPExcel < $objRea(e$!loa((/6@la$gescale*slH/);
,.,. *CH 3valores separados por comas6
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.
PHPExcel Developer Documentation $0
#BV li&itaciones
>ena en cuenta 7ue arc&ivo en !ormato 498 tiene alunos l:mites en cuanto a las cKlulas "e
estilo/ !ormato "e nAmero/ ...
,.,.1. P$PE%celAReaderA*CH
Lectura de un arc!i)o CH
<ste" pue"e leer un c%"io. 4sv arc&ivo con lo siuiente#
$objRea(e$ < ne2 PHPExcel_Rea(e$_CSV();
$objPHPExcel < $objRea(e$!loa((/sa,ple*cs"/);
Marco CH 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 alunas opciones antes "e leer un arc&ivo 498.
>ena en cuenta 7ue PHPExcel'Oea"er'498 por "e!ecto asume 7ue la cara "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+. AseArese 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"/);
Leer una !o&a de c7lculo espec6%ica
arc&ivos 498 s%lo pue"e contener una &o0a "e c3lculo. Por lo tanto/ pue"e especi!icar 7ue la &o0a
para leer "es"e 498#
$objRea(e$!setS#eetIn(ex(6);
Lea en la !o&a de c7lculo existentes
4uan"o se tra)a0a con arc&ivos 498/ pue"e ocurrir 7ue "esea importar "atos 498 en un o)0eto
existente PHPExcel. El siuiente c%"io cara un arc&ivo 498 en "%lares actuales o)0PHPExcel
contiene alunas &o0as/ - las importaciones en la &o0a H
s#
$objRea(e$ < ne2 PHPExcel_Rea(e$_CSV();
$objRea(e$!set9eli,ite$(.;.);
$objRea(e$!setEnclos%$e(..);
$objRea(e$!setLineEn(ing(/F$Fn/);
$objRea(e$!setS#eetIn(ex(O);
$objRea(e$!loa(IntoExisting(/6O&eat%$e(e,o*cs"/: $objPHPExcel);
PHPExcel Developer Documentation $1
B.B.2. PHPExcel-.riter-CH
Creacin de un arc!i)o CH
<ste" pue"e escri)ir un c%"io csv. Arc&ivo con lo siuiente#
$objG$ite$ < ne2 PHPExcel_G$ite$_CSV($objPHPExcel);
$objG$ite$!sa"e(/6O&eat%$e(e,o*cs"/);
Marco CH 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 alunas 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"/);
Escri$ir una !o&a de c7lculo espec6%ica
arc&ivos 498 s%lo pue"e contener una &o0a "e c3lculo. Por lo tanto/ pue"e especi!icar 7uK &o0a para
escri)ir a un arc&ivo 498#
$objG$ite$!setS#eetIn(ex(6);
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)aro 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"/);
Escri$ir D>FGC arc!i)os CH
<n arc&ivo 498 se pue"en marcar como <>JBG por escri)ir un enca)e(a"o "el arc&ivo "e lista "e
materiales. Esto se pue"e activar me"iante el siuiente c%"io#
$objG$ite$ < ne2 PHPExcel_G$ite$_CSV($objPHPExcel);
$objG$ite$!setCse140(t$%e);
$objG$ite$!sa"e(/6O&eat%$e(e,o*cs"/);
Decimal # separadores de miles
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!iuraci%n reional "e la con!iuraci%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.
PHPExcel Developer Documentation $2
<suarios .nlKs 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$(.:.);
usuarios alemanes 7uerr3n utili(ar los valores opuestos.
$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$(.*.);
>ena en cuenta 7ue el c%"io 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
>ena 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
>ena en cuenta 7ue s%lo PHPExcel'Lriter'H>M5 salir la primera &o0a "e c3lculo "e !orma
pre"etermina"a.
Escri$ir una !o&a de c7lculo
<ste" pue"e escri)ir un c%"io &tm. Arc&ivo con lo siuiente#
$objG$ite$ < ne2 PHPExcel_G$ite$_H30L($objPHPExcel);
$objG$ite$!sa"e(/6O&eat%$e(e,o*#t,/);
Escri$e todas las !o&as
5os arc&ivos H>M5 pue"en contener una o m3s &o0as "e c3lculo. 9i "esea escri)ir to"as las &o0as en
un Anico arc&ivo H>M5/ utilice el siuiente c%"io#
$objG$ite$!2$iteAllS#eets();
Escri$ir una !o&a de c7lculo espec6%ica
5os arc&ivos H>M5 pue"en contener una o m3s &o0as "e c3lculo. Por lo tanto/ pue"e especi!icar 7uK
&o0a "e escri)ir en H>M5#
$objG$ite$!setS#eetIn(ex(6);
Marco de las im7,enes ra65 del arc!i)o H>ML
Pue"e &a)er situaciones en las 7ue "esea esta)lecer expl:citamente las im3enes ra:( inclui"a. Por
e0emplo/ uno po"r:a 7uerer ver el estilo Di,g < /position: $elati"e; i>K%ie$(a:
6px; top: 6px; anc#o: AR6px; #eig#t: 7?px;/ s$c < /i,Lgenes
http://www.domain.com/ E logotipo * jpg /bo$(e$ </ 6 /! en luar "e estilo
PHPExcel Developer Documentation $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%"io siuiente para lorar 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)aro 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,/);
Incrustacin de cdi,o H>ML ,enerado en una p7,ina /e$
Po"r:a &a)er una situaci%n en la 7ue "esea incrustar el c%"io 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%"io 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
p3ina 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;
&ontsi>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!
PHPExcel Developer Documentation $4
Escri$ir D>FGC arc!i)os H>ML
<n arc&ivo H>M5 se pue"en marcar como <>JBG por escri)ir un enca)e(a"o "el arc&ivo "e lista "e
materiales. Esto se pue"e activar me"iante el siuiente c%"io#
$objG$ite$ < ne2 PHPExcel_G$ite$_H30L($objPHPExcel);
$objG$ite$!setCse140(t$%e);
$objG$ite$!sa"e(/6O&eat%$e(e,o*#t,/);
Decimal # separadores de miles
8ea la secci%n PHPExcel'Lriter'498 c%mo controlar la aparici%n "e estos.
(.,. -./
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
>ena en cuenta 7ue arc&ivo en !ormato PDJ tiene alunas limitaciones con respecto a las cKlulas
"e estilo/ !ormato "e nAmero/ ...
B.C.1. PHPExcel-.riter-PDF
>ena en cuenta 7ue s%lo PHPExcel'Lriter'PDJ salir la primera &o0a "e c3lculo "e !orma
pre"etermina"a.
Escri$ir una !o&a de c7lculo
<ste" pue"e escri)ir un c%"io p"!. Arc&ivo con lo siuiente#
$objG$ite$ < ne2 PHPExcel_G$ite$_P9=($objPHPExcel);
$objG$ite$!sa"e(/6O&eat%$e(e,o*p(&/);
Escri$e todas las !o&as
5os arc&ivos PDJ pue"en contener una o m3s &o0as "e c3lculo. 9i "esea escri)ir to"as las &o0as en
un Anico arc&ivo PDJ/ utilice el siuiente c%"io#
$objG$ite$!2$iteAllS#eets();
Escri$ir una !o&a de c7lculo espec6%ica
5os arc&ivos PDJ pue"en contener una o m3s &o0as "e c3lculo. Por lo tanto/ pue"e especi!icar 7uK
&o0a para escri)ir en PDJ#
$objG$ite$!setS#eetIn(ex(6);
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)aro antes "e c3lculo#
PHPExcel Developer Documentation $$
$objG$ite$ < ne2 PHPExcel_G$ite$_P9=($objPHPExcel);
$objG$ite$!setP$eCalc%late=o$,%las(&alse);
$objG$ite$!sa"e(/6O&eat%$e(e,o*p(&/);
Decimal # separadores de miles
8ea la secci%n PHPExcel'Lriter'498 c%mo controlar la aparici%n "e estos.
,.:. ?eneracin de archivos de E%cel a partir de plantillas 3leerI
modiicar 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&/ especiall-
i! -our template &as man- st-les/ pae 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!iuraci%n "e p3ina/ 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.);
>ena en cuenta 7ue se pue"e carar un arc&ivo xlsx - enerar un arc&ivo xls.
4. Cr2ditos
Please re!er to t&e internet pae &ttp#;;www.co"eplex.com;PHPExcel;LiCi;8iew.aspxE
titleF4re"itsIre!errin>itleFHome !or upBtoB"ate cre"its. Por !avor/ consulte la p3ina "e .nternet
&ttp#;;www.co"eplex.com;PHPExcel;LiCi;8iew.aspxEtitleF4re"itsIre!errin>itleFHome para
actuali(ar la !ec&a "e crK"itos.
PHPExcel Developer Documentation $H
8. *r'ditos
Por !avor/ consulte la p3ina "e .nternet &ttp#;;www.co"eplex.com;PHPExcel;LiCi;8iew.aspxE
titleF4re"itsIre!errin>itleFHome para actuali(ar la !ec&a "e crK"itos.
PHPExcel Developer Documentation $7
(ppendix (0 Cla)es )7lidas de matri5 de
appl#From(rra# para estilo 34
En la ta)la siuiente se muestran las claves "e matri( v3li"a para appl-JromArra- PHPExcel'9t-le ,+
clases. 9i el =mapa "e la propie"a"= columna se asina una clave a una incu)a"ora/ el valor
proporciona"o para esa clave se pue"e aplicar "irectamente. 9i el =mapa "e la propie"a"= columna
se asina una clave a un compra"or/ el valor proporciona"o para esa clave se aplicar3 como un
con0unto "e estilo.
PHPExcel_Bt/le
Arra- Ce-# Maps to propert-#
!ill
!ont
)or"ers
alinment
num)er!ormat
protection
etJill,+
etJont,+
etBor"ers,+
etAlinment,+
et@um)erJormat,+
etProtection,+
PHPExcel_Bt/le_1ill
Arra- Ce-# Maps to propert-#
t-pe
rotation
startcolor
en"color
color
setJill>-pe,+
setOotation,+
et9tart4olor,+
etEn"4olor,+
et9tart4olor,+
PHPExcel_Bt/le_1ont
Arra- Ce-# Maps to propert-#
name
)ol"
italic
un"erline
striCe
color
si(e
super9cript
su)9cript
set@ame,+
setBol",+
set.talic,+
set<n"erline,+
set9triCet&rou&,+
et4olor,+
set9i(e,+
set9uper9cript,+
set9u)9cript,+
PHPExcel_Bt/le_Forders
Arra- Ce-# Maps to propert-#
all)or"ers
le!t
ri&t
top
)ottom
"iaonal
vertical
&ori(ontal
"iaonal"irection
outline
et5e!t,+^ etOi&t,+^ et>op,+^ etBottom,+
et5e!t,+
etOi&t,+
et>op,+
etBottom,+
etDiaonal,+
et8ertical,+
etHori(ontal,+
setDiaonalDirection,+
set2utline,+
PHPExcel_Bt/le_Forder
Arra- Ce-# Maps to propert-#
st-le
color
setBor"er9t-le,+
et4olor,+
PHPExcel Developer Documentation $G
PHPExcel_Bt/le_Ali3n&ent
Arra- Ce-# Maps to propert-#
&ori(ontal
vertical
rotation
wrap
s&rinC>oJit
in"ent
setHori(ontal,+
set8ertical,+
set>extOotation,+
setLrap>ext,+
set9&rinC>oJit,+
set.n"ent,+
PHPExcel_Bt/le_Iu&-er1or&at
Arra- Ce-# Maps to propert-#
co"e setJormat4o"e,+
PHPExcel_Bt/le_Protection
Arra- Ce-# Maps to propert-#
locCe"
&i""en
set5ocCe",+
setHi""en,+
PHPExcel Developer Documentation $D

También podría gustarte