Komentáře k článku

PHPExcel: tabulky jednoduše

Na internetu je nepřeberné množství řešení pro generování dokumentů ve formátu Excel. Leckdy zákazník právě takový export dat požaduje. V tomto článku si ukážeme, jak pracovat s jednou z nejrozsáhlejších knihoven, totiž s knihovnou PHPExcel. Funkčností a možnostmi se blíží téměř samotnému Excelu.

Zpět na článek

17 komentářů k článku PHPExcel: tabulky jednoduše:

      1. Pavel PtáčekAutor příspěvku

        Re: Zajímavost

        Zajímavosti jsem si nevšiml, nicméně na článek jsem narazil již před nějakou dobou – zrovna když jsem knihovnu s funkcemi PHPExcel hledal :)

  1. David

    Pozor na délku provádění skriptu a operační paměť

    Knihovna je skutečně skvělá a není problém vygenerovat téměř cokoliv. Na co však chci upozornit případné zájemce, zápis do XLSX (ostatní jsem nezkoušel) je hodně drahý v případě, že stylujete buňky a provádíte další šílenosti. Další věc, kterou knihovna žere po megabajtech, je operační paměť. Načtení existujícího nebo vytvoření vlastního souboru je opravdu náročné.
    Na levném hostingu se vám toto může vymstít.
    Myslete na to a řádně testujte.

    Je tu velký prostor pro vylepšování knihovny, snad se k tomu někdy někdo dostane.

    1. dc

      Re: Pozor na délku provádění skriptu a operační paměť

      pouzival som ju v jednom projekte kde som ale potreboval generovat pomerne velke dokumenty (niekolko desiatok zaloziek a kazda obsahovala pomerne vela buniek) a v takom pripade bola tato kniznica skoro nepouzitelna.Bezne phpcko pri generovani zozralo aj cez 256MB ram a viac a tiez doba generovania bola obcas dost dlha. Na male veci je to fajn ale na generovanie vecsich sheetov to nieje moc vhodna kniznica.

      1. Pavel PtáčekAutor příspěvku

        Re: Pozor na délku provádění skriptu a operační paměť

        Co se paměťové náročnosti týče, v současné době patřím k těm, kteří to pro dané projekty nemusí řešit.

        Nicméně, napadá mne několik řešení:
        1.) Sdílené styly (aspoň tak jsem to pochopil) viz http://phpexcel.codeplex.com/…ad/View.aspx?… . Ani duplicateStyle ani setSharedStyle se mi nepodařilo rozchodit, ale pokud to vnímám správně pak by shared style daný styl měl zapsat do souboru jenom jednou. Pokud nastavujete styl pro buňky A1:Z2540, pak bych si tipl, že PHPExcel vytvoří v paměti jeden styl pro jednu buňku – v tomto případě se pak bavíme o 32*2540 což je samozřejmě nechutné pro paměť.
        Shared styles – pokud se vám je podaří rozchodit – by tento problém měli efektivně odstranit.
        2.) Generovat vždy jeden worksheet do samostatného souboru – v podstatě rozdělit práci. V praxi bych to řešil vyexportováním 5 souborů (každý s jedním worksheetem) a pak měl skript, který vše sloučí dohromady – .xlsx soubor je jenom prostý ZIP, tím pádem by mělo stačit vše nakopírovat do složky „worksheets/“ a příslušné upravit soubor workbook.xml (viz článek pana Vrány: http://php.vrana.cz/…ml-v-php.php)

        Podobným způsobem v současnosti řeším mass import souborů do CMS kde mám tři skripty:
        1.) ten, co rozbalí ZIP od uživatele do dočasné složky, nakonec pošle header(„Location: „) na importovací skript
        2.) ten, co prochází dočasnou složku a po každých 500 souborech pošle header(“Location: „) sám na sebe. Pokud již nemá co importovat, zašle header zpět na hlavní skript
        3.) Skript který volám z konzole – tzv. entry point. Ten je zadán do crontabu a používá curl na načtení mass importu.

        Pokud zkombinujeme oba přístupy, pak by jsme mohli docílit kýženého výsledku. Napadá mne rovněž vše vygenerovat v PHPExcel do jednoho worksheetu vždy s jedním stylem – a styly pak rozkopírovat skriptem jiným, který bude editovat přímo obsah jednotlivých xml souborů v rámci .xlsx souboru.

        Jedná se o teorii, nicméně je to pořád příjemnější než jedna knihovna na kterou jsem narazil také – ta generovala klasickou HTML tabulku a vše ukládala do .xls souboru . Zábavné je, že to fungovalo (nicméně, bez diakritiky…)

        Pokud tu náročnost na paměť budete dál řešit a naleznete nějaké chytré řešení, budu rád pokud dáte vědět.

        1. roman

          Re: Pozor na délku provádění skriptu a operační paměť

          Kod tohoto som nevidel, ale neverim na efektivnost objektoveho PHP kodu a mam pocit, ze programator sa zaobera skor cistotou kodu z hladiska POHLADU druheho programatora co to bude citat, ako efektivnostou, co sa nakoniec niekde vypomsti.

  2. Ventil

    Nadšení následované zklamáním

    O této knihovně jsem se dozvěděl (a začal ji používat) cca před 2 roky. Nadšeně jsem začal generovat přímo sestavy v XLS, po čase jsem toho nechal – uživatelé portálu si začali zvyšovat nároky a na to tato knihovna opravdu není dělaná. Jak už zde bylo uvedeno, jakmile na list vložíte více buněk, nějaké to formátování (ať to opravdu vypadá jako tabulka) či výpočtů (ať využijete význam souboru XLS) tak se dostanete do takových časových a paměťových nároků, že vás přejde chuť. Před časem jsem si stáhnul aktuální verzi, abych se přesvědčil zda už je na tom lépe

    Generování do XLS jsem tak vzdal, tedy až do doby až naleznu vhodnou alternativu. PHPExcel je dobrý počin, ale plusy (featury a možnosti formátu XLS) bohužel narážejí na aktivní a efektivní využití. Pokud potřebujete jednoduché tabulky vystačíte si s formáty HTML či PDF. Pokud potřebujete složitější tabulky, myslím že PHPExcel není zrovna košér řešení :-(

    Budu vděčen za jakýkoliv odkaz směřující na alternativu k PHPExcel.

  3. M.

    čeština

    vyzkoušel sem mnoho méně náročných knihoven, ale ani jedna neuměla vygenrovat XLS s češtinou a tím sem skončil

    1. Janci

      Re: čeština

      Ja používam php_writeexcel a so slovenčinou som problém nemal. Takže asi ani so slovenčinou nebude. Stačí skonvertovať text na cp1250.

  4. michal.kocarek

    Export do HTML namísto XLS(X), aneb nativní podpora HTML/XML v Office >= 2000

    Možná toto někomu pomůže. Málokdo ví, že Microsoft Office podporuje jako nativní formát také XML/HTML, a to již od verze 2000. Kupříkladu Excel umí otevřít HTML soubor, a data z první tabulky, kterou najde v tomto souboru, převede do buněk a patřičně oformátuje.

    Při troše hraní s Content-Type výstupní hlavičkou, a generováním HTML souboru lze vygenerovat relativně jednoduše z PHP jednolistový „excelovský“ soubor.

    PS: Nedávno Microsoft zveřejnil kompletní Office HTML/XML referenční manuál. ( ke stažení na http://msdn.microsoft.com/…e.10%29.aspx ) V tomto manuálu jsou popsané veškeré jemnosti Microsoftího HTML, včetně CSS atributů začínajících na -mso-, a jejich vlastností. Lze se zde dozvědět, jak formátovat odrážky pro Word, zalamování textu pro Excel, atp. A to vše lze použít pro vygenerování HTML souboru, který je poté předhozen Officím programům, a správně načten.

    1. Racky

      Re: Jde to i neobjektově, jednodušeji, primitivněji, pomocí headeru a HTML

      Dodávám, že pro správnou češtinu je nutno po odeslání headerů dopsat klasicky cca toto:

      <!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.0 Transitional//EN“ „http://www.w3­.org/TR/xhtml1/­DTD/xhtml1-transitional.dtd“>
      <html xmlns=“http:/­/www.w3.org/1999/xhtml“ xml:lang=“en“ lang=“en“>
      <head>
      <meta http-equiv=“Content-Type“ content=“text/html; charset=utf-8″ />
      <meta name=“language“ content=“cs“ />

      <title>titulek</ti­tle>
      </head>

      <body>

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3118