mySQL + Excel + php?

tobmir

Mitglied
Hallo,

ich habe eine MySQL Datenbank die online ist wo Teilnehmer für etwas gelistet sind die sich angemeldet haben.

Jetzt hätte ich gerne eine Möglichkeit diese Liste bei Bedarf als Excel Dokument herunterzuladen.

Anzeigen der Einträge in PHP ist ja kein Problem.
Nur wie stelle ich das am besten an wenn man die Daten der SQL Datenbank als xls Datei herunterladen möchte?
Der User soll die Datenbank nicht öffnen müssen. Es soll am besten direkt via Browser auf einer Seite downloadbar sein.
Aber wenn es eine Möglichkeit gibt direkt von Excel aus die Dateien herunterzuladen bin ich auch dafür offen.

Falls es in PHP oder Office besser reinpasst bitte dorthin verschieben liebe Mods.
 
Download-Link, dahinter wird aus dem Datenbank-Inhalt ein CSV-File erstellt und dieses dann als Download zurückgegeben. Das ist zwar kein echtes Excel-File, aber Excel kanns öffnen wie eine ganz normale XLS. Geschichte erledigt.
 
Bei den PEAR-Paketen gibt es eins, was scheinbar Excel-Dateien schreiben kann. Wenn Du mit PEAR zurechtkommst, ist das vielleicht was für Dich.

Ansonsten funktioniert auch, wie Norbert erklärt hat, die Ausgabe von CSV-Daten. Wenn dem Dokument dann noch die entsprechenden Header verpasst, sollte Excel das auch ohne Umschweife und Beschwerden öffnen.

Gruß hpvw
 
Das mit der CSV hört sich gut an allerdings möchte ich die Daten nicht hintereinander weg zu stehen haben wie in einem normalen Dump sondern ganz ordentlich damit man damit arbeiten kann.

Also mit Überschriften und Einträgen spalten- und zeilenweise.
 
Es ist doch kein Problem, die CSV-Datei folgendermaßen zu erstellen:
  • Mysql-Daten in Array auslesen
  • Mysql-Tabellenfelder der Anfrage auslesen oder in Variable angeben
  • Schreiben der CSV-Datei:
    • Spaltenüberschriften erhälst du dann durch implode(";",$array_tabellenfelder);
    • Zeilen erhälst du durch Verkettung der einzelnen Daten aus der Mysql-Abfrage
    • Dazwischen nicht "\n" vergessen - damit eine neue Zeile angefangen wird.
  • mittels fopen() + fwrite() eine neue Datei anlegen und darin den CSV-Inhalt abspeichern.
 
Wo hapert es denn als erstes? Du hast ja geschrieben, dass eine Auslesung der MySQL-Daten nach PHP für dich machbar ist. Dann ist es ja kein großer Schritt zum Abspeichern in einer Variable:

PHP:
$result = mysql_query("SELECT id,name,text FROM tabelle;");

$csvDaten ='id;name;text\n'; //hier wird der Inhalt der CSV-Datei gespeichert, Startwert ist die Überschrift

while($zeile = $mysql_fetch_row($result)) {
  $csvDaten .= implode(';',$zeile).'\n'; // pro Datensatz wird eine Zeile für die .csv hinzugefügt
}

//Schreiben der Datei und abspeichern unter neueDatei.csv
$zeiger = fopen('neueDatei.csv','w');
fwrite($zeiger,$csvDaten);
fclose($zeiger);

Wenn du weitere Infos zur Funktionsweise der verwendeten Funktionen brauchst, wende dich am besten an die deutsche Referenz unter http://www.php.net, wirklich empfehlenswert:)
 
Dein Code soweit.
Allerdings bleibt alles in einer Zeile.

\n wird mit geschrieben und anschließend kommt das, was dann in Zeile 2 stehen sollte.

Kannst ja mal gucken ob du den Fehler findest.

PHP:
$conn = mysql_connect("localhost", "***", "*****");
if (!$conn) {
   print "Keine Verbindung zur Datenbank: " . mysql_error();
   exit;
}


if (!mysql_select_db("db02")) {
   print "Kann db02 nicht auswählen: " . mysql_error();
   exit;
}

$result = mysql_query("SELECT id,name,vorname,gebdat,plz,ort,mail,verein,dis,sex FROM teilnehmer;");

$csvDaten ='id;name;vorname;gebdat;plz;ort;mail;verein;dis;sex\n'; //hier wird der Inhalt der CSV-Datei gespeichert, Startwert ist die Überschrift


while($zeile = mysql_fetch_row($result)) {
  $csvDaten .= implode(';',$zeile).'\n'; // pro Datensatz wird eine Zeile für die .csv hinzugefügt
}

//Schreiben der Datei und abspeichern unter teilnehmer_bsl.csv
$zeiger = fopen('teilnehmer_bsl.csv','w');
fwrite($zeiger,$csvDaten);
fclose($zeiger);
 
\n wird nur als Zeichenumbruch, also als Steuerzeichen, interpretiert, wenn der String in doppelte Anführungszeichen und nicht in Hochkommata eingeschlossen ist.

Gruß hpvw
 
Zurück