NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 16 - Práce s dokumenty Excel v PHP - Úvod a první skripty

V minulé lekci, Šablonovací systém XSLT v PHP - Vícejazyčné šablony, jsme si ukázali jednoduchý způsob vytváření vícejazyčných šablon v XSLT.

V následujících lekcích si ukážeme, jak zapisovat do souboru .xlsx (formát tabulkového procesoru), neboli jak generovat .xlsx soubory přímo v PHP.

Motivace

PHP jde ruku v ruce s databázemi, zejména MySQL. Někdy ale potřebujeme s daty pracovat v trochu jiném formátu. Někdy potřebujeme zaslat výpis z databáze, umožnit dalším lidem práci s daty bez nutnosti znalosti SQL a PHP a tak dále. Pro tyto případy se nejlépe hodí Excel, přesněji .xlsx dokumenty.

Knihovna PhpSpreadsheet je určitě skvělou volbou. Je součástí balíku PHPOffice, který mimo tabulek umožňuje práci i s dokumenty Word nebo třeba PowerPoint.

S pomocí knihovny PhpSpreadsheet v několika dalších lekcích:

  • převedeme data do tabulky v Excelu,
  • provedeme jednoduché výpočty,
  • vytvoříme několik přehledných grafů.

Vše si ukážeme na příkladu zpracování dat z meteostanice.

Prostředí

Knihovna PhpSpreadsheet využívá Composer. Kdo jej nemá nainstalovaný, může si ho stáhnout z oficiálních stránek, celá instalace zabere jenom pár minut a kliknutí. Pokud vás nástroj Composer zajímá víc, jeho instalace a základní příkazy jsou probrány v samostatné lekci o nástroji Composer.

Dále potřebujeme nějakou instanci PHP (>7.2). Vzhledem k tomu, že se jedná už o pokročilejší lekci, předpokládám, že všichni máme nějaké PHP prostředí k dispozici. Já osobně využívám pro testovací účely XAMPP, jeho zprovoznění je také otázka několika málo minut a kompletní návod najdete v samostatné lekci v kurzu PHP základy.

Samozřejmostí je potom nějaký tabulkový editor jako LibreOffice či Excel. Knihovna PhpSpreadsheet podporuje řadu formátů, my budeme využívat Microsoft Excel (>2007) a formát .xlsx (novější formát .xls).

Základní nastavení

Vytvoříme si pracovní adresář, v mém případě se jedná o složku phpspreadsheet/ v adresáři xampp/htdocs/.

Otevřeme příkazovou řádku (administrační mód) a pomocí příkazu change directory se přesuneme do pracovního adresáře, v mém případě to bude tedy příkaz:

Konzolová aplikace
> cd C:\xampp\htdocs\phpspreadsheet

Pomocí Composeru nainstalujeme celý balík:

composer require phpoffice/phpspreadsheet

Pokud instalace proběhla v pořádku, třikrát hurá. S velkou pravděpodobností narazíte na chybovou hlášku o nenalezených rozšířeních, něco jako:

Soubory a práce s nimi v PHP

Díky chybové hlášce můžeme zjistit, co je špatně:

phpoffice/phpspreadsheet 1.18.0 requires ext-gd * -> it is missing from your system. Install or enable PHP's gd extension.

V jejím textu se píše, že nám chybí rozšíření gd pro PHP. Otevřeme soubor C:\xampp\php\php.ini, najdeme patřičný zakomentovaný řádek a odkomentujeme ho odstraněním středníku. U mě to byl řádek:

extension=gd

Nyní by instalace měla proběhnout v pořádku. Pokud máte za sebou práci s obrázky v PHP, tak toto rozšíření máte už pravděpodobně aktivované :)

Hello World!

Než se pustíme do nějakého většího projektu, pojďme otestovat, že nám vše funguje tak, jak má. Knihovna je dobře zdokumentovaná, pro klasický Hello World využijeme příklad od autorů:

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();

// vezmi list, na kterém právě jsme
$sheet = $spreadsheet->getActiveSheet();

// zapiš do buňky A1
$sheet->setCellValue('A1', 'Hello World!');
// zapiš do buňky B1
$sheet->setCellValue('B1', "I'm here!");

// vytvoř xlsx objekt
$writer = new Xlsx($spreadsheet);
// vytvoř z xlsx objektu soubor "helloworld.xlsx"
$writer->save('helloworld.xlsx');

Skript umístíme pod libovolným názvem (například index.php) do pracovního adresáře a spustíme Apache. Potom najdeme cestu k našemu skriptu (podle konfigurace XAMPP, třeba http://localhost/phpspreadsheet/index.php. Zdánlivě se nic nestane, ale když otevřeme pracovní složku, najdeme v ní soubor helloworld.xlsx. Pokud vidíte jakýkoliv výstup, nejspíš jste někde v postupu nebo skriptu udělali chybu. Pokud vygenerovaný soubor otevřeme v Excelu, uvidíme následující:

Soubory a práce s nimi v PHP

Pokud bychom nechtěli soubor ukládat přímo na disk, ale stáhnout ho, je potřeba výstup přesměrovat na php://output:

$writer->save('php://output');

Pokud bychom udělali jenom to, prohlížeč by soubor pokládal za klasický text a jenom vypsal změť znaků. Proto musíme upravit header, neboli hlavičku. Je důležité před samotným voláním zavolat funkci ob_end_clean(), protože jakýkoliv výpis před samotným stažením by způsobil poškození souboru, a ten by pak nešel otevřít.

Celý skript by mohl vypadat třeba takto:

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;

$spreadsheet = new Spreadsheet();

// vezmi list, na kterém právě jsme
$sheet = $spreadsheet->getActiveSheet();

// zapiš do buňky A1
$sheet->setCellValue('A1', 'Hello World!');
// zapiš do buňky B1
$sheet->setCellValue('B1', "I'm here!");

// vytvoření nového zapisovače do xlsx
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');

// vyslání hlavičky - spreadsheet soubor
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
// vyslání hlavičky - soubor ke stažení
header('Content-Disposition: attachment; filename="helloworld.xlsx"');

// vymazání bufferu, aby nedošlo ke znehodnocení souboru
ob_end_clean();
// vyslání souboru na výstup
$writer->save('php://output');

Všimněte si, že jsme využili místo přímo Xlsx objektu IOFactory. Není to podmínkou pro stažení souboru, jenom další možnost, jak k tabulkám přistupovat.

Jak můžeme vidět, práce s .xlsx soubory není s knihovnou PhpSpreadsheet nikterak složitá. S pomocí několika řádků jsme úspěšně vytvořili soubor a zapsali do něj.

V další lekci, Práce s dokumenty Excel v PHP - Tabulka a graf, zpracujeme data ze souboru do dokumentu Excel, vytvoříme první tabulku i čárový graf.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 82x (1.8 MB)

 

Předchozí článek
Šablonovací systém XSLT v PHP - Vícejazyčné šablony
Všechny články v sekci
Soubory a práce s nimi v PHP
Přeskočit článek
(nedoporučujeme)
Práce s dokumenty Excel v PHP - Tabulka a graf
Článek pro vás napsala Miroslava Škutová
Avatar
Uživatelské hodnocení:
8 hlasů
.
Aktivity