Soubory MS Excel a MS Word v PHP, ASP či Notepadu

6. října 2002

V tomto článku si ukážeme, jak vytvořit sešity a dokumenty MS Office bez použití tohoto drahého kancelářského balíku. Podle návodu je vytvoří každý, ať už pomocí PHP, ASP či manuálně v jakémkoli textovém editoru. Výhodou takto vytvořených souborů je jejich malá velikost oproti „originálním“ sešitům a dokumentům, navíc je můžeme při každé změně naší databáze automaticky generovat a rozesílat e-maily.

Princip celé „operace“ je velmi jednoduchý, vystačíme si přitom se znalostmi HTML a CSS. Je jasné, že nepůjde o klasický zápis souborů, které tedy nebudou plnohodnotnými soubory odpovídajících typů. Využijeme totiž toho, že MS Office plně podporují HTML dokumenty a CSS. Budeme tak vytvářet dokumenty ve formátu HTML, které teprve koncová aplikace (tj. MS Office) převede do svého prostředí.

Nabízí se otázka, proč vytvářet falešné soubory MS Office pomocí jednoduché změny koncovky souboru ve formátu HTML? Kromě důvodů zmiňovaných v úvodu, je hlavním argumentem možnost snadných úprav souborů pomocí Excelu či Wordu. Ten, komu soubor pošleme, uvidí pravděpodobně raději sešit MS Excel, který si může jednoduše upravit, než HTML stránku, se kterou si ještě většina uživatelů neví rady.

MS Excel

Stačí vytvořit tabulku v HTML naformátovat pomocí CSS, například takovou:

<table border=“1″>
<tr><td>ID</td><td>Jmeno</td><td>Prijmeni</td></tr>
<tr><td>1</td><td>Petr</td><td>Vomacka</td></tr>
<tr><td>2</td><td>Josef</td><td>Opicka</td></tr>
<tr><td>3</td><td>Karel</td><td>Sadlo</td></tr>
</table>

Tento kód uložíme pod jménem „tabulka.xls“ a výsledný soubor pak v MS Excel bude vypadat jako normální plnohodnotný sešit s jedním listem, který se jmenuje stejně jako název souboru. Takto vytvořený sešit samozřejmě můžeme použít také jako zdroj dat ODBC (přístup k sešitům MS Excel popisuji v článku Jak umístit data z Excelu na server).

MS Word

Vytvoříme normální tělo stránky, například:

<div style=“text-align:center;color:#0000A0;font-size:20px“>Dokument .doc s tabulkou:</div>
<table align=“center“ border=“1″><br>
<tr><td>ID</td><td>Jmeno</td><td>Prijmeni</td></tr>
<tr><td>1</td><td>Petr</td><td>Vomacka</td></tr>
<tr><td>2</td><td>Josef</td><td>Opicka</td></tr>
<tr><td>3</td><td>Karel</td><td>Sadlo</td></tr>
</table>

Soubor uložíme jako „dokument.doc“, který bude vypadat takhle:

Generování sešitu MS Excel z databáze

Následující ukázka předvádí jednoduchou metodu generování sešitu z databáze MySQL prostřednictvím PHP:

<?php
$spojeni=MySQL_Connect(„počítač ke kterému se připojujeme“,“jméno uživatele v databázi“,“heslo uživatele“);   // Připojíme se k databázi
MySQL_select_DB(„databáze“);   // Zvolíme si databázi, ve které budeme pracovat
$fp=FOpen(„tabulka.xls“,“w“);   // Otevřeme soubor tabulka.xls, pokud existuje, bude smazán, jinak se vytvoří nový soubor
FPutS($fp,“<table border=’1′>“);   // Zapíšeme do souboru začátek tabulky
FPutS($fp,“<tr>“);   // Zapíšeme do souboru začátek řádky, kde budou názvy sloupců (polí)
$vysledek_pole=MySQL_query(„show columns from tabulka“, $spojeni);   // Vybereme z databáze názvy polí tabulky tabulka a postupně je zapíšeme do souboru
while ($vysledek_array_pole=MySQL_Fetch_row($vysledek_pole)){
FPutS($fp,“<td><b&gt „.$vysledek_array_pole[0].“ </b&gt</td>“);}
FPutS($fp,“</tr>“);   // Zapíšeme do souboru konec řádky, kde jsou názvy sloupců (polí)
$vysledek=MySQL_query(„select * from tabulka“, $spojeni);   // Vybereme z databáze všechny záznamy v tabulce tabulka a postupně je zapíšeme do souboru
while ($vysledek_array=MySQL_Fetch_row($vysledek)){
FPutS($fp,“<tr>“);
for($i=0; $i<count($vysledek_array); $i++) FPutS($fp,“<td> „.$vysledek_array[$i].“</td>“);
FPutS($fp,“</tr>“);}
FPutS($fp,“</table>“);   // Zapíšeme do souboru konec tabulky
Fclose($fp);   // Zavřeme soubor
MySQL_Close($spojeni);   // Ukončíme spojení s databázovým serverem
?>

Snad jediný problém může nastat, pokud má uživatel v předvolbách zaškrtnuto „Při otevírání potvrdit převod“, protože pak musí potvrdit dialog povolující konverzi. Automatickou konverzi HTML souboru umožňují až aplikace MS Office 95 a vyšší. To je ale více než vyváženo doslova miniaturní velikostí souborů. Sami si konec konců můžete provést srovnání. Soubor v ukázce má velikost 231 B, zatímco stejná tabulka, vytvořená pomocí programu MS Excel, má 13 824 B!

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

3 komentářů

  1. kdo se v tom má vyznat?

    Čvc 1, 2010 v 12:53

    <?php
    $spojeni=MySQL_Connect("počítač ke kterému se připojujeme","jméno uživatele v databázi","heslo uživatele"); // Připojíme se k databázi
    MySQL_select_DB("databáze"); // Zvolíme si databázi, ve které budeme pracovat
    $fp=FOpen("tabulka.xls","w"); // Otevřeme soubor tabulka.xls, pokud existuje, bude smazán, jinak se vytvoří nový soubor
    FPutS($fp,"“); // Zapíšeme do souboru začátek tabulky
    FPutS($fp,““); // Zapíšeme do souboru začátek řádky, kde budou názvy sloupců (polí)
    $vysledek_pole=MySQL_query(„show columns from tabulka“, $spojeni); // Vybereme z databáze názvy polí tabulky tabulka a postupně je zapíšeme do souboru
    while ($vysledek_array_pole=MySQL_Fetch_row($vysledek_pole)){
    FPutS($fp,“<b&gt ".$vysledek_array_pole[0]." </b&gt“);}
    FPutS($fp,““); // Zapíšeme do souboru konec řádky, kde jsou názvy sloupců (polí)
    $vysledek=MySQL_query(„select * from tabulka“, $spojeni); // Vybereme z databáze všechny záznamy v tabulce tabulka a postupně je zapíšeme do souboru
    while ($vysledek_array=MySQL_Fetch_row($vysledek)){
    FPutS($fp,““);
    for($i=0; $i<count($vysledek_array); $i++) FPutS($fp," „.$vysledek_array[$i].““);
    FPutS($fp,““);}
    FPutS($fp,““); // Zapíšeme do souboru konec tabulky
    Fclose($fp); // Zavřeme soubor
    MySQL_Close($spojeni); // Ukončíme spojení s databázovým serverem
    ?>

    Odpovědět
  2. depka

    Zář 27, 2010 v 23:41

    da se nejak specifikovat kodovani?

    Odpovědět
  3. Btihin

    Pro 2, 2014 v 15:39

    Dobrý den, jak zjistím zda můs server podporuje fopen fputs udělal jsem i jednoduchou tabulku a nic stále chyba

    $fp=fopen(„tabulka.xls“,“w“);
    $str =(‚

    prvnijednaprvnidva

    druhyjednadruhydva

    ‚);
    fputs($fp, $str, $length);
    fclose($fp);

    Odpovědět

Napsat komentář: kdo se v tom má vyznat? Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *