Reklama

zonerbooks.cz | zoner.cz | czechia.com | regzone.cz | inshop.cz | inmail.cz | zonerpress.cz | zonerantivirus.com | zonerama.cz

interval.cz

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

06. 10. 2002 | Jan Šedo | HTML | Komentáře: 2

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.


Reklama


Další aktuální články na interval.cz

Tematicky související články

Dejte vědět i ostatním o článku

Komentáře ke článku

Přidat nový komentář

kdo se v tom má vyznat?

Autor komentáře: kdo se v tom má vyznat?

Datum vložení: 01. Červenec 2010, 12:53:26

<?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
?>

depka

Autor komentáře: depka

Datum vložení: 27. Září 2010, 23:41:12

da se nejak specifikovat kodovani?

Zpět na začátek komentářů | Zpět na začátek článku

Přidat nový komentář

Jméno a e-mail jsou nepovinné. Příspěvky obsahující odkaz jsou moderovány.

Zoner AntiVirus Free pro Android
zabezpečte si svůj smartphone, zdarma
EU doména jen 49 Kč + www stránky zdarma
Profesionální eshop Zoner inShop od 990 Kč.
Reklama
Reklama

Syndikace

hledáme nové autory | redakce interval.cz | reklama na interval.cz

© ZONER software, a.s., všechna práva vyhrazena, interval.cz dodržuje právní předpisy o ochraně osobních údajů. Powered by WordPress.