SQL-Ergebnis nach Excel exportieren?

Servus,

habe ne PHP-MySql-Abfrage, dabei werden mir Daten aus der Datenbank ausgegeben…Logisch :smile:)

Diese Daten die auf der Php-Seite ja nun schön in ner Tabelle dargestellt werden, würde ich gerne per klick (Button) in ein Excel-File exportieren.
Nicht als csv wenn das möglich ist.

Geht das überhaupt?

Gruß Rolf

Hallo Rolf,

ja es gibt eine php-Klasse die Excel-Dateien schreiben kann. Allerdings sind es nach meinen Kenntnisse Excel-95 Dateien.

MfG Georg V.

Guten Morgen,

ja, hmmmm leider nichts gefunden, bis auf eine selber geschriebene, welche leider nicht funktioniert.

<?PHP require_once("cdb.php");<br /> var $dbresult;



 class CDump2MSExcel
 {
 var $dbresult;

 #
 # Initialisierung mit gleichzeitiger Ausfuehrung der Aktionen
 # Parameter: $statement = SQL-Statement.
 # $head = Tabellenspalten einfuegen true/false.
 # $filename = Dateiname unter dem der Export
 gespeichert werden soll.
 #
 function CDump2MSExcel ($statement, $head=true, $filename)
 {
 $oDB = new CDB;
 $oDB-\>CONNECT();
 $this-\>dbresult = $oDB-\>QUERY($statement);

 if($this-\>dbresult)
 {
 header("Content-Type: application/vnd.ms-excel; name='excel'");
 header("Content-disposition: attachment; filename=" . $dateiname);

 if($head == true)
 echo $this-\>Dump2MSExcel(true);
 else
 echo $this-\>Dump2MSExcel(false);

 }
 }

 #
 # Fuehre das SQL-Statement aus, baue die Daten zusammen und gebe diese
 # als Returnwert zurueck
 #
 function CDump2MSExcel($headline=true)
 {

 $sResult = "";
 $aFields = $this-\>ResultSETFieldNames();

 if($headline == true)
 {
 for($i = 0; $i FetchArray())
 {
 for($i = 0; $i dbresult);

 for ( $i = 0; $i dbresult, $i ));
 }

 return ($aFielNames);
 }

 } # End of class


 # Aufruf des SQL-Result - Export
 $oDump2MSExcel = new CDump2MSExcel ("SELECT \* FROM tablename ORDER BY ID", true, "export.xls");
 ?\>pre\>

Bei Zeile 41 bringt er mit Fehler --\> **Fatal error: Cannot redeclare CDump2MSExcel::CDump2MSExcel() in C:\xampp\htdocs\export.php on line 40**  


Zeile 41 = function CDump2MSExcel($headline=true)
Ich tippe drauf das es in der Office/Excel-Version 2007 nicht funktioniert :frowning:(((((

Hat evetnl noch jemand nen Tipp für mich?

Gruß Rolf

du deklarierst zweimal die gleiche Funktion

CDump2MSExcel

wenn du eine umbenennst, dann funktioniert das skript. Jedoch habe ich beim (wirklich schnellen) überfliegen gesehen, dass dieses Skript doch eine CVS-Datei erstellt, was du nicht wirklich wolltest, oder?

Da es eine CVS-Datei erstellt, sollte es mit jeder Excel-Version funktionieren - du musst sie halt nur importieren und angeben, wie die Spalten getrennt sind und ob es eine Überschrift gibt.

Wenn PEAR vorhanden ist, dann kannst du auch den Spreadsheet_Excel_Writer nutzen:

http://pear.php.net/package/Spreadsheet_Excel_Writer

Bye.

Hmmm, ja ok.
Das Spreadsheet_Excel_Writer hat ich mir runtergladen…
Aber damit komme ich garned klar. :frowning:(

Muss ich erstmal studieren, wie das abgeht.

Danke aber schonmal

Gruß Rolf

Puhhhh…also Pear ist drauf und scheinbar auch korrekt eingerichtet, habe mir nen Test erstelle --> export.php

<?php require_once 'Spreadsheet/Excel/Writer.php';<br />
// Creating a workbook
$workbook = new Spreadsheet\_Excel\_Writer();

// sending HTTP headers
$workbook-\>send(test.xls');

// Creating a worksheet
$worksheet =& $workbook-\>addWorksheet('My first worksheet');

// The actual data
$worksheet-\>write(0, 0, 'Name');
$worksheet-\>write(0, 1, 'Asadfsdfsdfge');
$worksheet-\>write(1, 0, 'John Smith');
$worksheet-\>write(1, 1, 30);
$worksheet-\>write(2, 0, 'Johann Schmidt');
$worksheet-\>write(2, 1, 31);
$worksheet-\>write(3, 0, 'Juan Herrera');
$worksheet-\>write(3, 1, 32);

// Let's send the file
$workbook-\>close();
?\> 

Ok, wenn ich nun die export.php aufrufe, erzeugt er mit das Excel mit den Daten John Smith und so nech, logisch!

Ich aber habe ja eine Datenbankabfrage…eben „Select * from BlaBlaBla“ mit den Ergebnissen halt -->

 $result = mysql\_db\_query ($dbname, $dbanfrage, $dbverbindung);
 while($ausgabe = mysql\_fetch\_array ($result))
 {
 echo "

";
echo „“;
echo „$ausgabe[kundenId]“;
echo „“;
echo „$ausgabe[name1]“;
echo „“;
echo „$ausgabe[Kundennummer]“;
echo „“;
echo „$ausgabe[count]“;
echo „“;
}
}
}
echo mysql_error();

HA, wie bekomme ich nun die Daten meine Sql-Abfrage in den zuübergebenen Feldern?

$worksheet->write(3, 0, ‚$ausgabe[count]‘); funtzt leider nicht
Ausserdem bringt er mit die Fehlermeldung -->

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\kunden.php:8) in C:\xampp\php\PEAR\Spreadsheet\Excel\Writer.php on line 67

Gruß Rolf

HA, wie bekomme ich nun die Daten meine Sql-Abfrage in den
zuübergebenen Feldern?

$worksheet->write(3, 0, ‚$ausgabe[count]‘); funtzt leider
nicht

„funtzt leider nicht“ ist keine fehlerbeschreibung.

wozu hast du $ausgabe in quotes geschrieben?
http://de3.php.net/manual/de/language.variables.basi…

Ausserdem bringt er mit die Fehlermeldung -->

Warning: Cannot modify header information - headers already
sent by (output started at C:\xampp\htdocs\kunden.php:8) in
C:\xampp\php\PEAR\Spreadsheet\Excel\Writer.php on line 67

Ergebnisse 1 - 10 von ungefähr 5.000.000 für cannot add header. (0,24 Sekunden)

http://www.php-faq.de/q-fehler-header.html

HA, wie bekomme ich nun die Daten meine Sql-Abfrage in den
zuübergebenen Feldern?

$worksheet->write(3, 0, ‚$ausgabe[count]‘); funtzt leider
nicht

„funtzt leider nicht“ ist keine fehlerbeschreibung.

Muss hier leider genügen, da er keine Fehlermeldung auch mit report_all ausgibt :smile:

wozu hast du $ausgabe in quotes geschrieben?
http://de3.php.net/manual/de/language.variables.basi…

Ausserdem bringt er mit die Fehlermeldung -->

Warning: Cannot modify header information - headers already
sent by (output started at C:\xampp\htdocs\kunden.php:8) in
C:\xampp\php\PEAR\Spreadsheet\Excel\Writer.php on line 67

Ergebnisse 1 - 10 von ungefähr 5.000.000 für cannot add
header. (0,24 Sekunden)

http://www.php-faq.de/q-fehler-header.html

Aber die Formatierung an sich hab ich nun gecheckt - heisst, soweit funktioniert mir das Teil nun.

Gruß Rolf