PHPExcel - generování souborů MS Excel

Pavel Windows, PHP

Po předcházejícím díle, jak tvořit v PHP soubory PDF přichází na řadu tvorba Excelovských tabulek. Zmíněný PHPExcel umí snad vše, na co si vzpomenete, proto si ukážeme základní funkcionalitu, jinak bychom tu byli týdny.

PHPExcel - generování souborů MS Excel

PHP je velmi rozšířená platforma (pro některé bohužel), proto není čemu se divit, že existují knihovny všeho druhu. Dnes si ukážeme jednu velmi rozsáhlou, a to PHPExcel.

Pro jednoduché exporty postačí i CSV soubor. Jak jej správně vygenerovat, aby Excel zobrazil i diakritiku je popsáno v článku CSV v Unicode.

PHPExcel

Knihovna jak název napovídá, dokáže pracovat se soubory MS Excel. Dokumenty můžete otevřít a pracovat s nimi, nebo je vytvořit a uložit případně rovnou stáhnout.

PHPExcel používá lazy loader __autoload, díky tomu se načtou pouze požadované třídy, a nebude zbytečně zatěžovat procesor a paměť, díky tomu vykonání bude rychlejší.

Čtení a zápis

Soubory můžete načíst z mnoha formátů Excel5, Excel2007, OpenOffice, CSV... a do mnoha souborů také zapsat Excel5, Excel2007, OpenOffice, HTML, CSV, PDF...

Příklad

Nebudu zde dlouho popisovat vše, co knihovna umí. Je toho opravdu hodně, ale ukážu příklady, co jsem využil. Mnoho dalšího lze nalézt v dokumentaci, která je dobře čitelná a přehledná.

$excel = new PHPExcel(); //vytvoříme novou třídu
$list = $excel->getActiveSheet(); //získáme aktivní list
$list->setTitle("Export"); //nastavíme titulek listu

$list->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); //orientace stránky na šířku
$list->getColumnDimension("A")->setWidth(5); // nastavíme šířku sloupce

$style = $list->getStyle("A7:L7"); //získáme styly buněk A7 až L7
$style->getAlignment()->setWrapText(true); //zalamování textu ano
$style->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB("cccccc"); //vyplníme šedou barvou #cccccc
$style->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //zarovnání na střed

// sloučíme buňky A1 až L1, nastavíme obsah a získáme její styly
$a1style = $list->mergeCells("A1:L1")->setCellValue("A1","Můj vlastní text",false)->getStyle("A1");
$a1style->getFont()->setBold(true)->setSize(12); //tučný text velikosti 12

$list->setCellValue("E5","Zpracoval:"); //nastavíme hodnotu buňky E5
$list->setCellValueByColumnAndRow(12,7,"Zaplaceno vše"); //nastavíme hodnotu pro 12 sloupec a 7 řádek (nemusíme znát písmenka sloupců)

//Při zadávání funkcí musíme používat její anglické názvy
$list->setCellValue("C5","=SUM(L8:L25)");

//nastavíme tenké ohraničení buněk
$list->getStyle('A7:L25')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

// mezi buňkami A7 až L7 dolní ohraničení bude dvojité
$list->getStyle('A7:L7')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_DOUBLE);

$format = "xlsx"; // "xls" pro starý formát
if($format == "xlsx"){
  header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
}else{ //xls
  header('Content-Type: application/vnd.ms-excel');
}        
header('Content-Disposition: attachment;filename="export.'.$format.'"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($excel, ($format == "xlsx" ? "Excel2007" : "Excel5"));
$objWriter->save('php://output'); //stahování souboru

Zkušenosti

Osobně používám PHPExcel pro export seznamů a formulářů pro pojišťovnu na přihlašovacím systému SUN Outdoor. Nevyužívám obrázky, grafy a mnoho dalšího co PHPExcel umí, ale umí toho opravdu hodně.


Na stránkách PHPExcel můžete knihovnu stáhnout a najdete zde také dokumentaci.

Přidat komentář

Právě odpovídáte na existující komentář. Zrušit

Komentáře

Novinky z blogu

Do Hyundai na interní prohlídku

Jak jsme zavítali do fabriky Hyundai Dymos v Nošovicích na jednu interní exkurzi. Absolvovali bezpečnostním školením, prošli si výrobní halu a také mohli zkusit vyrobit...

Další články