Zrzucenie danych z MySQL do plików .xls (EXCEL)

W sumie można się zastanowić, po co zrzucać do arkusza kalkulacyjnego bazę danych. Odpowiedź brzmi - prościej się ją przegląda.

Jak to zrobić, czyli jak zrzucić odpowiednie pola do pliku excelowskiego? Nic prostszego.

Najlepiej zaprezentować to na przykładzie prostej bazy danych:

TABELA USER

----------------------------------
| ID | IMIE | NAZWISKO | MIASTO  |
==================================
| 1  | JAN  | KOWALSKI | WA-WA   |
----------------------------------
| 2  | ULA  | NOWAK    |  LODZ   |
----------------------------------
| 3  |ROMAN | NAWROCKI |  KOLO   |
----------------------------------


TABELA USER_WIEK

-------------------------------
| ID | DZIEN | MIESIAC | ROK  |
===============================
| 1  |  22   |   06    | 1999 |
-------------------------------
| 2  |  21   |   11    | 1978 |
-------------------------------
| 3  |  19   |   09    | 1907 |
-------------------------------


Chcemy uzyskać plik z następującymi danymi:

| LP | IMIE | NAZWISKO | ROK URODZNIA |

oczywiście przy założeniu, że każda dana jest w osobnej komórce, a następna seria danych jest w następnym wierszu.

Na początek tworzymy tablice z nagłówkami (nazwami kolumn):

<?
  $naglowki = array (
                              'Lp.',
                              'Imię',
                              'Nazwisko',
                              'Rok urodzenia'
                                );

   $nastepny_wiersz = "\n"; // separatory
   $nastepna_kolumna = "\t"; // separatory

?>


następnie odczytujemy odpowiednie dane z bazy danych i tworzymy serię danych (cały wiersz)

<?

function odczyt($id) {

Connect(); // domyślna funkcja do połączenia z bazą

$sql="SELECT * FROM user WHERE id='$id' "; // zapytanie o wszystkie pola z tablicy USER gdzie ID będzie równe $id
$query=mysql_query($sql); // wykonanie zapytania
if (!$user=mysql_fetch_array($query)) echo mysql_error(); //odczyt danych z warunkiem jeżeli sie nie powiedzie

$sql1="SELECT * FROM user WHERE id='$id' ";
$query1=mysql_query($sql1);
if (!$user_wiek=mysql_fetch_array($query1)) echo mysql_error();

  $seria = array (
                              $id,
                              $user['imie'],
                              $user['nazwisko'],
                              $user_wiek['rok'],
                              $następny_wiersz
                                );

return $seria;
}
?>



nasza funkcja ODCZYT($ID) zwraca nam cały wiersz danych, teraz należy umieścić tę funkcję w pętli i gotowe.


<?

if($plik = fopen("moj_plik.xls", "wb")) // utworzenie pliku
                                echo "<br>PLIK ZOSTAŁ UTWORZONY !!! ";
                                else
                                echo "Błąd tworzenia pliku !!!";



                foreach ($naglowki as $pole) { // pętla odczytująca tylko tablice
                         $dane.="$pole $nastepna_kolumna"; // zmienna $dane się zapełnia

                             }



 $sql="SELECT id FROM user";
  $query=mysql_query($sql);

while ($numer=mysql_fetch_array($query))

            foreach (odczyt($numer['id']) as $pole) { // pętla odczytująca tylko tablice
                         $dane.="$pole $nastepna_kolumna"; // zmienna $dane się zapełnia
                        $dane.=$nastepny_wiersz;
                             }


 fputs($plik, $dane); //zapisanie danych w pliku

 fclose($plik); //zamknięcie pliku

?>


Dowolnie zmieniając funkcję ODCZYT() oraz tablicę $naglowki możemy tworzyć dowolnie zapełniony plik XLS.
Informacje
Ostatnia modyfikacja 05-10-2005 12:38 Ostatni autor Freebird
Ilość wyświetleń 10105 Wersja 1
Komentarz
czarek777 dnia 25-08-2006 12:12
Panowie a co ze specyfikacją pliku xls?
Przecież nie można tam sobie wrzucać danych jak do zwykłej tekstówki!!!

Ja używam tego:
http://pear.php.net/package/Spreadsheet_Excel_Writer
czarek777 dnia 25-08-2006 12:12
Panowie a co ze specyfikacją pliku xls?
Przecież nie można tam sobie wrzucać danych jak do zwykłej tekstówki!!!

Ja używam tego:
http://pear.php.net/package/Spreadsheet_Excel_Writer
limak dnia 11-10-2005 22:30
no tak, nie ma wielokrotnych zapytan.. .ale i tak mozna namieszac :) pelno przykladów jest w necie do których nie potrzeba zapytan wielokrotnych.
Adamo dnia 06-10-2005 14:44
prgtw - to nie zadziała, po pierwsze to mySQL nie ma możliwości wielokrotnych zapytań więc tylko zwróci błąd - i to jest w sumie wielki plus, a po drugie to i tak raczej user nie ma nadanych praw później do drop table więc by też odmówiło. Co najwyżej można wziąć więcej pozycji niż ustawa przewiduje (\' OR 1=1;#)
Marooned dnia 06-10-2005 01:46
usunąłem spacje i poprawiłem tabelki

p.s.
grr... trza wywalić błąd Coyote z br w pre!

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0982 sek. (zapytań SQL: 9)