PHP

Kurz PHP (26.)

┌vodem  |  Kurz PHP |  Odkazy  |  Aplikace  |  Otßzky a odpov∞di

 

Generovßnφ XLS dokument∙

DneÜnφm dφlem navß₧eme na dφl, kde jsme generovali PDF dokumenty. Ukß₧eme si, jak generovat plnohodnotnΘ XLS dokumenty p°φmo z PHP. Na Internetu nalezneme spousty knihoven, kterΘ umo₧≥ujφ generovßnφ XLS dokument∙, ale vÜechny kvalitn∞jÜφ jsou placenΘ. My si v dneÜnφm dφle ukß₧eme, jak generovat XLS dokumenty pomocφ knihovny Spreadsheet_Excel_Writer (http://pear.php.net/package/Spreadsheet_Excel_Writer). Tento nßstroj (soubor t°φd) vychßzφ z p∙vodnφ PerlovΘ varianty t°φdy Spreadsheet::WriteExcel. My si nynφ ukß₧eme prßci s touto knihovnou.

ZaΦφnßme

Jeliko₧ se jednß o knihovnu, jen₧ je souΦßstφ Pear frameworku (PHP Extension and Application Repository - distribuΦnφ systΘm pro PHP komponenty), museli bychom nainstalovat a nastavit cel² Pear. Pro naÜi prßci jsem vytvo°il jednoduch² balφk, kter² jenom rozbalφte a umφstφte do zvolenΘho adresß°e. Tento balφk je k dispozici ke sta₧enφ zde. Pokud by n∞kdo nerozum∞l struktu°e adresß°∙, m∙₧e si ji prohlΘdnout zde:


+ Ole
  + Pps
    + File.php
    + Root.php
  + OLE.php
  + PPS.php
+ Spreadsheet
  + Excel
    + Writer
      + BIFFwriter.php
      + Format.php
      + Parser.php
      + Validator.php
      + Workbook.php
      + Worksheet.php
    + writer.php
+ PEAR.php
+ nas_skript.php

P°ed vytvo°enφm instance hlavnφ t°φdy pro tvorbu XLS dokument∙ musφme urΦit pomocφ funkce "ini_set()" direktivu "include_path". Pokud tedy mßme umφst∞ny svΘ skripty v adresß°i "e:\netpub\www\xls", bude funkce ini_set vypadat nßsledovn∞:


ini_set("include_path", 'E:\NETPUB\WWW\xls');

Potom musφme do naÜeho skriptu vlo₧it soubor "Writer.php" pro prßci s t°φdou. Hlavnφ Φßst skriptu by tedy m∞la vypadat nßsledovn∞:


<?php
// Nastavφme direktivu include_path.
ini_set("include_path", 'E:\NETPUB\WWW\xls');

// Chceme vlo₧it zvolenΘ soubory pouze jedenkrßt.
require_once "Spreadsheet\Excel\Writer.php";

Nynφ ji₧ m∙₧eme vytvo°it instanci t°φdy Spreadsheet_Excel_Writer, se kterou budeme pracovat p°i tvorb∞ XLS dokument∙. Jak si m∙₧eme vÜimnout, tak konstruktor p°ebφrß cestu k souboru, kter² bude nßsledn∞ vygenerovßn.

// JmΘno a cesta k souboru, kter² budeme vytvß°et.
$soubor = "e:\\tmp\\soubor.xls";

// Vytvo°enφ instance t°φdy.
$workbook = new Spreadsheet_Excel_Writer($soubor);

Po ·sp∞ÜnΘm vytvo°enφ instance t°φdy m∙₧eme vytvo°it nov² list pomocφ metody addWorksheet.

// P°idßnφ novΘho listu do dokumentu.
$worksheet =& $workbook->addWorksheet("Nov² list dokumentu");

Jak si m∙₧eme vÜimnout, tak u₧φvßme znaku & p°ed p°i°azenφm prom∞nnΘ. To znamenß, ₧e se odkazujeme na zvolen² objekt mφsto toho, abychom ho kopφrovali. V praxi to znamenß, ₧e jej pou₧ijeme p°i ka₧dΘm volßnφ metody addWorksheet() a addFormat(). Kdy₧ mßme nynφ vytvo°en nov² list v dokumentu, m∙₧eme do n∞j zapsat text pomocφ metody:

write( $radek, $sloupec, $text [, $format=0] )

Vybere sprßvnou metodu pro zßpis a zapφÜe zvolen² text (Φφslo apod.) do zvolenΘho sloupce a °ßdku.

// Zapsßnφ do listu.
$worksheet->write(0, 0, "JmΘno");
$worksheet->write(0, 1, "P°φjmenφ");

$worksheet->write(1, 0, "Josef");
$worksheet->write(1, 1, "Novßk");

Na zßv∞r musφme dokument uzav°φt pomocφ metody close().

// Uzav°enφ dokumentu.
$workbook->close();

Cel² nßÜ nov² skript pro generovßnφ XLS dokument∙ vypadß nßsledovn∞:


<?php
ini_set("include_path", 'E:\NETPUB\WWW\xls');

// Chceme vlo₧it zvolenΘ soubory pouze jedenkrßt.
require_once "Spreadsheet\Excel\Writer.php";

// JmΘno a cesta k souboru, kter² budeme vytvß°et.
$soubor = "e:\\tmp\\soubor.xls";

// Vytvo°enφ instance t°φdy.
$workbook = new Spreadsheet_Excel_Writer($soubor);

// P°idßnφ novΘho listu do dokumentu.
$worksheet =& $workbook->addWorksheet("Nov² list dokumentu");

// Zapsßnφ do listu.
$worksheet->write(0, 0, "JmΘno");
$worksheet->write(0, 1, "P°φjmenφ");

$worksheet->write(1, 0, "Josef");
$worksheet->write(1, 1, "Novßk");

// Uzav°enφ dokumentu.
$workbook->close();
?>

NßÜ soubor se nßm vygeneroval do nßmi zadanΘho adresß°e e:\tmp\, kde si jej m∙₧eme prohlΘdnout. Zvolen² adresß° musφ mφt nastaveny prßva zßpisu!

Pokud budeme chtφt, aby se nßm v²sledn² soubor odeslal do prohlφ₧eΦe ke sta₧enφ, vyu₧ijeme metody send(), kterou zavolßme po vytvo°enφ instance t°φdy.


<?php
ini_set("include_path", 'E:\NETPUB\WWW\xls');

// Chceme vlo₧it zvolenΘ soubory pouze jedenkrßt.
require_once "Spreadsheet\Excel\Writer.php";

// Vytvo°enφ instance t°φdy.
$workbook = new Spreadsheet_Excel_Writer();

$workbook->send("soubor.xls");

// P°idßnφ novΘho listu do dokumentu.
$worksheet =& $workbook->addWorksheet("Nov² list dokumentu");

// Zapsßnφ do listu.
$worksheet->write(0, 0, "JmΘno");
$worksheet->write(0, 1, "P°φjmenφ");

$worksheet->write(1, 0, "Josef");
$worksheet->write(1, 1, "Novßk");

// Uzav°enφ dokumentu.
$workbook->close();
?>

Formßtovßnφ dokumentu

K Φemu by nßm bylo vytvß°enφ nov²ch dokument∙ a list∙, kdybychom nemohli formßtovat vzhled bun∞k a pφsma. Nov² formßt vytvo°φme pomocφ metody addFormat() hlavnφ t°φdy.

// Vytvo°φme nov² formßt.
$tucnepismo =& $workbook->addFormat();
// Nastavφme pφsmo jako tuΦnΘ.
$tucnepismo->setBold();

Nynφ si ukß₧eme jednotlivΘ metody, kterΘ m∙₧eme vyu₧φt p°i tvorb∞ novΘho vzhledu.

setAling( $zarovnani )

Zarovnß obsah zvolenΘ bu≥ky podle zadanΘho kritΘria. Jako parametr $zarovnani m∙₧eme dosadit:

  • left - zarovnßnφ obsahu vlevo.
  • center - zarovnßnφ obsahu na st°ed.
  • top - zarovnßnφ obsahu k vrchnφmu okraji.
  • atd.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setAlign("center");

setMerge()

SlouΦφ zvolenΘ bu≥ky s dan²m formßtem dohromady. Tato metoda je aliasem metody setAlign('merge').

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setMerge();

setBold( [$sirka=1] )

Nastavφ zvolen² text jako tuΦn². Jako parametr $sirka m∙₧eme dosadit 0 pro normßlnφ text a 700 pro tuΦn² text.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setBold();

setBottom( $styl )

Nastavφ dolnφ ohraniΦenφ bu≥ky. Jako parametr $styl m∙₧eme dosadit 1 pro tenkΘ ohraniΦenφ a 2 pro tlustΘ ohraniΦenφ.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setBottom(1);

setTop( $styl )

Nastavφ hornφ ohraniΦenφ bu≥ky. Jako parametr $styl m∙₧eme dosadit 1 pro tenkΘ ohraniΦenφ a 2 pro tlustΘ ohraniΦenφ.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setTop(2);

setLeft( $styl )

Nastavφ levΘ ohraniΦenφ bu≥ky. Jako parametr $styl m∙₧eme dosadit 1 pro tenkΘ ohraniΦenφ a 2 pro tlustΘ ohraniΦenφ.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setLeft(2);

setRight( $styl )

Nastavφ pravΘ ohraniΦenφ bu≥ky. Jako parametr $styl m∙₧eme dosadit 1 pro tenkΘ ohraniΦenφ a 2 pro tlustΘ ohraniΦenφ.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setRight(2);

setBorder( $styl )

Nastavφ ohraniΦenφ celΘ bu≥ky. Jako parametr $styl m∙₧eme dosadit 1 pro tenkΘ ohraniΦenφ a 2 pro tlustΘ ohraniΦenφ.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setBorder(2);

setBorderColor( $barva )

Nastavφ barvu ohraniΦenφ bu≥ky. Jako parametr $barva m∙₧eme dosadit nßzev barvy (red, blue, atd.) nebo jejφ Φφslo (8 - 63).

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setBorderColor("blue");

setBottomColor( $barva )

Nastavφ barvu ohraniΦenφ spodnφ Φßsti bu≥ky. Jako parametr $barva m∙₧eme dosadit nßzev barvy (red, blue, atd.) nebo jejφ Φφslo (8 - 63). Obdobou jsou i metody setTopColor, setLeftColor, setRightColor.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setBorderColor("blue");

setColor( $barva )

Nastavφ barvu bu≥ky. Jako parametr $barva m∙₧eme dosadit nßzev barvy (red, blue, atd.) nebo jejφ Φφslo (8 - 63).

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setColor("blue");

setPattern( $cislo )

Umo₧≥uje nastavit styl v²pln∞ bu≥ky. Jako parametr m∙₧eme dosadit Φφslo stylu bu≥ky od 0 - 18 (0 = ₧ßdnß v²pl≥).

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setPattern(15);

setUnderline( $cislo )

Umo₧≥uje nastavit podtr₧enφ textu. Jako parametr m∙₧eme dosadit Φφslo 1 pro jednoduchΘ podtr₧enφ a 2 pro dvojitΘ podtr₧enφ.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setUnderline(2);

setItalic()

Umo₧≥uje nastavit kurzφvu textu.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setItalic();

setSize( $velikost )

Umo₧≥uje nastavit velikost textu v bu≥ce. Jako parametr $velikost m∙₧eme dosadit velikost pφsma.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setSize(20);

setTextWrap()

Umo₧≥uje nastavit zalamovßnφ textu v bu≥ce.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setTextWrap();

setTextRotation( $stupne )

Umo₧≥uje ·hel umφst∞nφ textu v bu≥ce. Jako parametr m∙₧eme dosadit velikosti ·hl∙: 0, 90, 270 a -1.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setTextRotation(270);

setNumFormat( $format )

Umo₧≥uje nastavit formßt textu v bu≥ce (Φas, datum, apod.). Jako parametr m∙₧eme dosadit n∞kter² z formßtu uveden²ch na http://sc.openoffice.org/excelfileformat.pdf (nap°φklad: "D-MMM-YYYY", ...).

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setNumFormat("D-MMM-YYYY");

setStrikeOut()

Umo₧≥uje nastavit text v bu≥ce na p°eÜkrtnut².

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setStrikeOut();

setScript( $index )

Umo₧≥uje nastavit text v bu≥ce jako hornφ nebo dolnφ index. Dosadit m∙₧eme 1 pro hornφ index a 2 pro dolnφ index.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setScript(1);

setFontFamily( $font )

Umo₧≥uje druh pφsma textu v bu≥ce. Dosadit m∙₧eme nap°φklad: "Times New Roman", "Courier", "Arial", atd.

P°φklad:


$mojepismo =& $workbook->addFormat();
$mojepismo->setFontFamily("Courier");


Pro tento dφl to bude vÜe. V p°φÜtφm dφle budeme dßle pokraΦovat v prßci s generovßnφm XLS dokument∙.

 

Petr Rympler