csv Dateien erstellen mit CakePHP (1.1)

26. Jul 2007

Nachdem wir gestern ein Tutorial hatten “CSV Dateien einlesen mit CakePHP” folgt nun der umgekehrte Weg.

Problem: Wir haben Daten, die wir gerne nach Excel oder anderen Programmen exportieren und dafür aus den Tabellendaten eine CSV Datei erstellen möchen.

Lösung: CakePHP ;-)

Nehmen wir an, wir möchten folgende Tabelle als CSV Datei speichern:

Vorname Nachname Firma
Max Mustermann Muster AG GmbH
Silke Mustermann Muster AG GmbH
Maria Mustermann Muster AG GmbH

Diese Daten habe ich in der Tabelle Report gespeichert. Meine Controllerfunktion sieht nun folgendermaßen aus:
[app]/reports/reports_controller.php

  1. function export() {
  2.         $reports = $this->Report->findAll();
  3.         $i=0;
  4.         foreach ($reports as $elem) {
  5.                 //Gehe durch alle Reporte
  6.                 foreach ($elem[‘Report’] as $elem2) {
  7.                         $report_ausgabe[$i][] = $elem2;
  8.                 }
  9.                 $i++;
  10.         }
  11.  
  12.         //Erstellen der CSV
  13.         $string = "";
  14.         //Erstellen des Headers
  15.         foreach ($reports[0][‘Report’] as $key=>$elem) $header_array[] = $key;
  16.         $string .= implode(";",$header_array);
  17.         $string .= "\r\n";
  18.        
  19.         foreach ($report_ausgabe as $elem) {                   
  20.                 $string .= implode(";",$elem);
  21.                 $string .= "\r\n";
  22.         }
  23.         @unlink(FILES."/report.csv");
  24.         file_put_contents(FILES."/report.csv",$string);
  25. }

Zuerst wird mittels findAll() die Tabelle vollständig in die Variable $reports eingelesen. Die Foreach Schleife danach kann genutzt werden, um weitere Daten mit auszulesen, die durch die Model Assoziationen mitgeliefert werden. Nach //Gehe durch alle Reporte könnte dort zum Beispiel stehen

  1. $report_ausgabe[$i][] = $elem[‘User’][‘username’]

Nachdem die Daten nun geordnet wurden, wird der Header erstellt. Diese Foreach Schleife läd die Spaltennamen der Datenbank als erste Zeile in den Ausgabestring. Die Daten werden dabei mit ; getrennt, ein Zeilenende markiert “\r\n” (oder nur \n bei Linux).
Anschließend erfolgt derselbe Einlesevorgang mit den einzelnen Datensätzen. Nachdem alles geschehen ist, wird der String mittels file_put_contents im webroot/files/ Ordner abgespeichert.

Einfach, oder?
Abschlusstipp: Im View kann die Datei mit

  1. <?php echo $html->link("Hier klicken um Download zu starten", "/files/report.csv");?>

angesprochen werden.

Kategorie: Allgemein, CakePHP | 1 Kommentar »


Veröffentlicht am Donnerstag, den 26. Juli 2007 um 17:09 Uhr veröffentlicht

Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.

Eine Reaktion zu “csv Dateien erstellen mit CakePHP (1.1)”

 

  1. saro Am 5. Januar 2009 um 16:57 Uhr

    Hallo,
    bei mir wird einfach kein Daten erstellt, obwohl ich die Daten im view gut sehen kann, ich benutze cakephp ich benutze die version 1.2 von cake.

Einen Kommentar schreiben

Du mußt angemeldet sein, um kommentieren zu können.