PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Excel-Datei erzeugen?


eXistence
2003-12-07, 13:11:33
hi,
ich habe eine Reihe von Daten (aus einer mySQL-DB), die ich in eine Excel-Datei bekommen will. Alles was ich dazu gefunden habe, bezieht sich darauf, eine CSV-Datei zu erzeugen, was an sich auch kein problem ist, aber:

Diese CSV-Datei muss in Excel auch explizit als CSV geöffnet werden, sonst übernimmt Excel die Tabelle nicht korrekt und dann muss man den Kram auch noch extra als *.xls abspeichern...

Das will ich mir alles sparen, bzw. diese funktion ist für jemand anders vorgesehen und ich kann halt nicht garantieren, dass der dazu bereit ist, bzw. das auch immer alles richtig macht :(
Am einfachsten wäre es, wenn ich gleich ne richtige *.xls-Datei hätte...

lässt sich das irgendwie machen ?

Aqualon
2003-12-07, 16:37:11
Vielleicht hilft dir folgendes weiter:

http://www.stargeek.com/scripts.php?script=2&cat=sql

Aqua

Harleckin
2003-12-09, 15:17:07
Dieses Problem kannst du AFAIK mit Perl erledigen.
Du musst das SQL-[1] und Excel[2]-Modul verwenden.

[1] http://www.linux-magazin.de/Artikel/ausgabe/2002/06/perl-api/perl-api.html
[2] http://www.linux-magazin.de/Artikel/ausgabe/2002/03/perl/perl.html

eXistence
2003-12-09, 16:40:40
Original geschrieben von Harleckin
Dieses Problem kannst du AFAIK mit Perl erledigen.
Du musst das SQL-[1] und Excel[2]-Modul verwenden.

[1] http://www.linux-magazin.de/Artikel/ausgabe/2002/06/perl-api/perl-api.html
[2] http://www.linux-magazin.de/Artikel/ausgabe/2002/03/perl/perl.html

Dummerweise habe ich von Perl nicht wirklich nen Plan...
Lässt sowas wirklich auf nem webserver machen (btw: auf den webserver selbst hab ich keinen zugriff :( )? es soll ja nicht nur einmal gemacht werden (dann könnte ich das ja auch hier local bei mir machen), sonder ich brauche ne funktion, die dem besucher, ne excel-datei liefert, in der auch die aktuellen Informationen stehen...

Gibts zu der Perl-Geschichte nen gescheites Tutorial ?

Birdman
2003-12-09, 19:30:06
Original geschrieben von eXistence
Diese CSV-Datei muss in Excel auch explizit als CSV geöffnet werden, sonst übernimmt Excel die Tabelle nicht korrekt und dann muss man den Kram auch noch extra als *.xls abspeichern...

Dies kommt nur daher, weil das falsche Trennzeichen gewählt wurde. Excel kann ein CSV welches Strichkommatas ";" verwendet, per Doppelklick-Öffnen nicht richtig darstellen.
Trennt man die Werte hingegen mit einem simplen Komma "," dann gehts wunderbar.

Wieso das so ist kann wohl nur Microsoft sagen, zumal das Strichkomma ";" ja das default Trennzeichen von Excel für .csv Files ist.

eXistence
2003-12-09, 19:52:30
Original geschrieben von Birdman
Dies kommt nur daher, weil das falsche Trennzeichen gewählt wurde. Excel kann ein CSV welches Strichkommatas ";" verwendet, per Doppelklick-Öffnen nicht richtig darstellen.
Trennt man die Werte hingegen mit einem simplen Komma "," dann gehts wunderbar.

Wieso das so ist kann wohl nur Microsoft sagen, zumal das Strichkomma ";" ja das default Trennzeichen von Excel für .csv Files ist.

oh geil, tatsächlich *freu*
dann hat sich der ganze Aufwand vorerst erledigt, wie cool :)
Ich mach mir schon voll die Gedanken und dann ist es sone kleine Lösung... :)

Marcel
2003-12-10, 01:28:10
Ich kann mich dunkel erinnern, dass ich in einer vergleichbaren Situation ein CSV erzeugt, aber mit der Endung .xls gespeichert habe. Wenn mein Hirn mir diesen Teil der Menschheitsgeschichte nicht falsch erzählt, klappte das wunderbar.

Gast
2003-12-11, 14:01:09
Und das ganze nochmal in Php.


<?PHP
/******************************************************************************** *****************************
* MySQL2Excel
* version: v0.0.1 (NOT TO BE CONTINUED...)
* author: e-voc [Uwe Pries]
* mailto: webmaster@judas-price.de
* date: 2000-12-31
******************************************************************************** *****************************
* version: v0.0.2
* mailto: mmuench@voltra.net
* date: 2001-03-31
******************************************************************************** *****************************
* version: v0.0.3
* mailto: sascha@kulawik.de
* date: 2001-06-25
******************************************************************************** *****************************/
$host = "inserthost";
$user = "insertuser";
$password = "insertpassword";
$database = "insertdatabase";
$table = "inserttable";

$query_text = "SELECT * FROM " . $table;

Header("Content-Type: application/vnd.ms-excel");

$db_link = mysql_connect($host, $user, $password);
mysql_select_db($database, $db_link);

$result = mysql_query($query_text, $db_link);
$fieldcounts = mysql_num_fields($result);
for($i = 0; $i < $fieldcounts; $i++) {
$fieldtype = mysql_fetch_field($result, $i);
/* Damit der Datentyp der Spalte nicht angezeigt wird
if ($i < ($fieldcounts-1)) echo "$fieldtype->name [$fieldtype->type]\t";
else echo "$fieldtype->name [$fieldtype->type]\n";
*/
if ($i < ($fieldcounts-1)) echo "$fieldtype->name \t";
else echo "$fieldtype->name \n";
}
$myrow = mysql_fetch_array($result);
do {
for($i = 0; $i < $fieldcounts; $i++) {
$fieldname = mysql_field_name($result, $i);
if ($i < ($fieldcounts-1)) echo $myrow[$fieldname] . "\t";
else echo $myrow[$fieldname] . "\n";
}
} while ($myrow = mysql_fetch_array($result));
?>


Hatte vor kurzem auch so ein Problem und das hier funktioniert einwandfrei.