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.
K tomuto článku již není možné přidávat další komentáře