Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SPREADSHEETS
ODS
CON
PHP
Autor | fetux
http://www.siemprecontralacorriente.com/
v. 0.0.2
GENERAR
SPREADSHEETS
ODS
CON
PHP
INTRODUCCIN
*uchas veces necesitamos 'enerar reportes o hojas (e c+lculo mas complejas a partir (e (atos ,ue manejamos (es(e nuestra aplicaci-n web. .n este pe,ue/o manual vamos a ver como lo'rarlo0 mostran(o tambien al'unos ejemplos pr+cticos. 1(s2hpGenerator es una librer3a escrita por #aurent $uibert0 http://o(sphp'enerator.lapinator.net/0 en 2425 para 'enerar hojas (e c+lculo (e 1pen"ocument0 http://www.openoffice.or'/. #a librer3a provee las clases0 m6to(os0 y propie(a(es necesarias para crear (ocumentos realmente complejos. Necesitaremos para esto: 1(s2hpGenerator0 24250 "1*0 y 782.
GENERAR
SPREADSHEETS
ODS
CON
PHP
Figura 1. HolaMundo.ods
.n el caso (e necesitar ,ue nuestra planilla ten'a mas (e una tabla tenemos ,ue crear tantos objetos como (eseemos (e la clase o(s=able. No olvi(arse (e incrustar las tablas al terminar0 antes (e invocar (ownloa(1(s!ile. Al'o interesante es ,ue con el m6to(o Det"efault=able (e la clase o(s po(emos (efinir ,ue tabla se mostrara primero cuan(o se abra la hoja (e c+lculo. $ods#$set-efaultTable($!iTabla);
Figura 2. OdsPhpGenerator nos permite seleccionar que tabla queremos que se muestre por defecto al abrir el documento.
FORMATO DE CELDAS
4ay varias opciones para (ar formato a las cel(as. .n teor3a hay %2 tipos (e cel(as: vac3a@ ca(ena (e teEto@ correo electr-nico@ ?#@ numero real@ fecha@ hora@ fecha/hora@ euro@ (-lar@ libra@ ima'en@ Di notamos como habiamos crea(o nuestra primer cel(a0 lo habiamos hecho con new o(s=ableCellDtrin'9: C2
GENERAR
SPREADSHEETS
ODS
CON
PHP
como par+metro (el m6to(o a((Cell. Fste m6to(o tiene un par+metro ,ue es un objeto ,ue represente justo el tipo (e cel(a ,ue ,ueremos crear: // .l par/!etro de esta instanciaci0n es el dato que contiene la celda new odsTable%ell&trin'( (ola )undo* ) As3 como la clase o(s=ableCellDtrin' es para ca(enas (e teEto0 tenemos una clase para ca(a tipo. ejemplo para afianGar esto: 12php require_once( ods/ods.php ); $ods = new ods(); $table = new odsTable( !iTabla%on,or!ato ); $row = new odsTable"ow(); $row#$add%ell( new odsTable%ell&trin'( (ola )undo* ) ); $row#$add%ell( new odsTable%ell.!pt3() ); $row#$add%ell( new odsTable%ell&trin'.!ail( fetux4'!ail.co! ) ); $row#$add%ell( new odsTable%ell&trin'5rl( http6//www.fetux.co!/ ) ); $row#$add%ell( new odsTable%ell,loat(7.898:) ); $row#$add%ell( new odsTable%ell-ate(date( ;#!#d )< ))--;;;; ) ); $row#$add%ell( new odsTable%ellTi!e( =T>?(7?):?& < (())&&@)=) ) ); $row#$add%ell( new odsTable%ell-ateTi!e(date( ;#!#d ). T>?67?6:? < ))--;;(())&& ) ); $row#$add%ell( new odsTable%ell%urrenc3(8??< 5&- ) ); // 5&- o .5" o AB= $row#$add%ell( new odsTable%ellC!a'e( i!'/lo'o.pn' ) ); $table#$add"ow($row); $ods#$addTable($table); $ods#$download+ds,ile( Tipo-e%eldas.ods ); 2$ n pe,ue/o
ESTILOS
DE CELDA
.l formato (e las cel(as va mucho mas all+ (el tipo ,ue se le asi'ne a ca(a cel(a. 2o(emos (ar formato (es(e el estilo (e las cel(as. Cuan(o hablo (e estilo me refiero a color (el teEto0 el color (e fon(o 9bacH'roun(: (e una cel(a0 a los bor(es0 alineaci-n0 fuente0 tama/o (e la fuente0 y a los estilos conoci(os como ne'rita0 cursiva0 y subraya(o. 4ay al'o importante a tener en cuenta y ,ue (iferencia entre (ar un tipo y (ar un estilo a una cel(a. Como vimos0 para ,ue una cel(a sea (e un tipo (ebe crearse un objeto (e una clase especifica para ca(a tipo (e cel(a ,ue po(emos crear. Ahora bien0 para (ar este tipo (e formato con estos estilos0 (ebemos a're'ar como Altimo par+metro (e ese objeto0 un objeto (e la clase o(sDtyle=ableCell. Fsta clase es la ,ue contiene to(os estos estilos. .n (efinitiva se crea0 en primer lu'ar0 un objeto con to(os los estilos ,ue ,ueremos a'rupar0 y lue'o se aplican esos estilos a una cel(a. $amos a ver un ejemplo para aclarar este remolino (e palabras. 12php C&
GENERAR
SPREADSHEETS
ODS
CON
PHP
require_once(ods/ods.php); $ods = new ods(); $st3le = new ods&t3leTable%ell(); $st3le#$set%olor(Dff????E); $st3le#$setBacF'round%olor(D??ff??E); $st3le#$setBorder(?.?8c! solid D????ff); $st3le#$setText@li'n(center); // start G center G end G Hustif3 $st3le#$set,ontIie'ht(bold); // bold G nor!al $st3le#$set,ont&t3le(italic); // italic G nor!al $st3le#$set5nderline(Jfont#colorK); // font#color G D??????E G null $st3le#$set,ont&iLe(J8MptK); //&eleccionar el tipo de letra $Ti!esNew"o!an = new ods,ont,ace(Ti!es New "o!an); $ods = add,ont,aces($Ti!esNew"o!an); $st3le#$set,ont,ace($Ti!esNew"o!an); $table = new odsTable(ods&t3leTable%ell); $table#$add"ow($row = new odsTable"ow()); $row#$add%ell( new odsTable%ell&trin'(J)i celda con for!atoK< $st3le)); $ods#$addTable($table); $ods#$download+ds,ile(JTabla%on,or!ato.odsK); 2$ Creo ,ue con esto ya tenemos un comienGo para empeGar a ver como funciona esto (e crear planillas (e calculo 1"D (es(e 242. =o(avia nos falta0 un poco mas sobre el formato0 creo ,ue es un 'ran tema. De'uro tambien falta muchas cosas ,ue la librer3a no ha resuelto0 pero esperemos se pue(a lo'rar. #o ,ue si vamos a ver es un poco es como hacer para combinar cel(as0 o fijar ancho (e columnas0 y al'unos eEtras antes (e ver ,ue es lo ,ue propone lalibrer3a para manejar al'o fun(amental ,ue son las f-rmulas.
MODIFICAR
Aparecen una nueva clase: o(sDtyle=ableColumn0 para (efinir estilos (e columna. Fsta clase tiene el m6to(o setColumnJi(th0 ,ue tiene como par+metro el tama/o (el ancho (e la columna. CK
GENERAR
SPREADSHEETS
ODS
CON
PHP
$st3le%olu!n = new ods&t3leTable%olu!n(); $st3le%olu!n#$set%olu!nIidth(O:c!O); Como teniamos nuestro o(s=able?ow0 tambi6n tenemos o(s=ableColumn0 y como par+metro le pasamos nuestro estilo crea(o. $colu!n = new odsTable%olu!n($st3le%olu!n); "e esperar0 otro m6to(o (e la clase o(s=able es a((=ableColumn. L i'ual ,ue a((=able?ow se pue(en incrustar cuentas columnas0 en este caso0 necesitemos. // @'re'o dos colu!nas de : c!. $table#$addTable%olu!n($colu!n); $table#$addTable%olu!n($colu!n); =ener en cuenta ,ue si el ancho es (istinto0 (ebemos crear un nuevo estilo.
COMBINAR
CELDAS
=enemos el setNumberColumnsDpanne( y setNumber?owsDpanne( para combinar cel(as horiGontal y verticalmente. $row = new odsTable"ow(); $cell = new odsTable%ell&trin'( %o!bino 9 celdas horiLontal!ente ); $cell#$setNu!ber%olu!ns&panned(9); $row#$add%ell( $cell ); $table#$add"ow($row); $row = new odsTable"ow(); $cell = new odsTable%ell&trin'( %o!bino 9 celdas Pertical!ente ); $cell#$setNu!ber"ows&panned(9); $row#$add%ell( $cell ); $table#$add"ow($row); // @'re'o celdas con ods%oPeredTable%ell en las que co!bine excepto la pri!era //for de n#8 for($i=?; $i17; $iQQ) R $row = new odsTable"ow(); $row#$add%ell( new ods%oPeredTable%ell() ); $table#$add"ow($row); S $eamos ,ue suce(e con este c-(i'o. 2rimero creamos una fila con new odsTableRow(), lue'o creamos una cel(a (e tipo string. Como vemos0 el m6to(o setNumberColumnsSpanned() tiene como par+metro el nAmero (e cel(as 9hacia la (erecha: a combinar. Como ya vimos insertamos la cel(a en la fila0 y lue'o la fila en la tabla. 2ara combinar cel(as verticalmente hay unas l3neas mas ,ue (ebemos a're'ar. Cuan(o invocamos setNumberRowsSpanned() con la canti(a( (e cel(as 9hacia abajo: a combinar0 solo informamos ,ue se combinaran esas cel(as0 pero creamos las filas ,ue las contienen. 2or eso (ebemos crearlas0 y utiliGar C5
GENERAR
SPREADSHEETS
ODS
CON
PHP
odsCoveredTableCell() para saber ,ue es una cel(a combina(a. Como vemos lo hacemos con un for (e n )% filas. Ahora veremos al'o un poco mas interesante. Combinar un 'rupo (e cel(as (e n filas B n columnas. 2or ejemplo: K B K $row = new odsTable"ow(); $cell = new odsTable%ell&trin'( %o!bino 9T9 ); $cell#$setNu!ber%olu!ns&panned(9); $cell#$setNu!ber"ows&panned(9); $row#$add%ell( $cell ); $table#$add"ow($row); for($i=?; $i17; $iQQ) R $row = new odsTable"ow(); $row#$add%ell( new ods%oPeredTable%ell() ); $row#$add%ell( new ods%oPeredTable%ell() ); $row#$add%ell( new ods%oPeredTable%ell() ); $row#$add%ell( new ods%oPeredTable%ell() ); $table#$add"ow($row); S $eamos el for: en este caso el for si'ue sien(o (e n )% filas0 pero pero en lu'ar (e a're'ar una cel(a por ca(a vuelta (el for0 a're'amos K 9canti(a( (e columnas:.
FRMULAS
Creo ,ue las f-rmulas son fun(amentales en las hojas (e c+lculo. ?ealmente per(er3a mucho senti(o si no eEistiencen. 4ay muchas f-rmulas ,ue po(emos aplicar a nuestras cel(as. 1(s2hpGenerator tiene soporte0 hasta el momento0 para al'una (e ellas.
SUMA
// %reo 8? filas. .n las celdas un nu!ero rando! . Cnserto las filas for($i=?; $i18?; $iQQ) R $row = new odsTable"ow(); $row#$add%ell( new odsTable%ell,loat(rand(?<:?))); $table#$add"ow($row); S // %reo una nuePa fila< 3 una celda para la f0r!ula $row = new odsTable"ow(); $cell = new odsTable%ell,loat(?); $cell#$set,or!ula(O&5)(U.@86.@8?V)O); CM
GENERAR
SPREADSHEETS
ODS
CON
PHP
CONCATENACIN
2ara la concatenaci-n el proce(imiento es el mismo0 ten(riamos ,ue usar por ejemplo: $cell#$set,or!ula( %+N%@T.N@T.(U.@>8V;O O;U.%8:V;O texto O;U.B8?V) );
...RESUMEN
.n este pu,ue/o manual vimos lo ,ue necesitamos para crear una hoja (e c+lculo b+sica. 4a'o referencia a crear filas0 crear cel(as0 (ar formato a estas cel(as0 ya sea el tipo (e (ato ,ue contienen0 o el estilo. 2or otro la(o vimos el ancho (e las columnas y como combinar cel(as. L terminamos con al'o (e cel(as ,ue contienen f-rmulas. Aun,ue (epen(emos (el (esarrollo (e la librer3a 1(s2hpGenerator v 0.0.20 versi-n con la ,ue contamos hoy0 ,ue(a en nuestra habili(a( (e pro'rama(ores (e crear soluciones eficientes.
CO