MySQL > Excel

Gudy hat gesagt.:
@hpvw
habe den Link nicht gelesen,
Dich meinte ich nicht.
Gudy hat gesagt.:
aber das soll nicht gehn? Bei meinem Office XP flupt dad wunderbar *freu*
In der Quelle steht, dass es nicht wie gewünscht funktioniert. Dass heißt, es wird vermutlich einige Excel-Browser-Kombinationen geben, die damit Probleme haben. Leider steht dort nicht, von wann der Beitrag ist, vielleicht bezieht sich das ja auf Office97 oder so.
 
Übrigends:
Das geht:
PHP:
<?php
    header("Content-Type: application/vnd.ms-excel");
    header("Content-Disposition: attachment; filename=\"dateiname.csv\"");
    echo "Spalte 1 Zeile 1;Spalte2 Zeile 1\n";
    echo "Spalte 1 Zeile 2;Spalte2 Zeile 2\n";
?>
Das geht nicht:
PHP:
<?php
    header("Content-Type: application/vnd.ms-excel");
    header("Content-Disposition: attachment; filename=\"dateiname.csv\"");
    echo "Spalte 1 Zeile 1,Spalte2 Zeile 1\n";
    echo "Spalte 1 Zeile 2,Spalte2 Zeile 2\n";
?>
Semikolon-Seperated geht, Komma-Seperated nicht.

Edit: Wenn man das CSV-File nach dieser Definition erstellt, geht es auch nicht (wird richtig Murks):
PHP:
<?php
    header("Content-Type: application/vnd.ms-excel");
    header("Content-Disposition: attachment; filename=\"dateiname.csv\"");
    echo "\"Spalte 1 Zeile 1\",\"Spalte2 Zeile 1\"\n";
    echo "\"Spalte 1 Zeile 2\",\"Spalte2 Zeile 2\"\n";
?>
Man benötigt also ein anderes Steuerzeichen, als das Komma.
 
Zuletzt bearbeitet:
jo, danke erstmal.

der code funktioniert einwandfrei:

----------------------------------------------------------------------------------------
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"excel.xls\"");
echo "Spalte 1 Zeile 1\tSpalte2 Zeile 1\r\n";
echo "Spalte 1 Zeile 2\tSpalte2 Zeile 2\r\n";
----------------------------------------------------------------------------------------

wenn ich nun die 2 unteren zeilen in eine datei schreibe und folgenden code ausführe müsste es doch eigentlich auch . tut es aber net. dann ist wieder das leidige problem, dass es nur in der 1. spalte angezeigt wird:

----------------------------------------------------------------------------------------
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"excel.xls\"");
echo readfile("test.csv");
----------------------------------------------------------------------------------------
 
Wenn Du es in einer Datei hast, musst Du \t durch einen echten Tab ersetzen und \r\n durch einen entsprechenden Zeilenumbruch, dann sollte es funktionieren. Außerdem solltest Du Dir mal die Hilfe zu [phpf]readfile[/phpf] durchlesen. Da gehört kein echo mehr hin.
 
jo, das funktioniert jetzt. allerdings noch eine frage:

das unten ist mein code. wenn ich die "header" gleich mit in diese php-datei einbinde klappt es wiederum nicht. es wird mir dann im excel nur eine leere seite angezeigt.

wenn ich eine extra php-datei aufrufe, in der nur diese 3 zeilen stehen klappt es:
Code:
<?php

header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"excel.xls\"");
readfile("test.csv");

?>

Code:
        header("Content-Type: application/vnd.ms-excel");
  	header("Content-Disposition: attachment; filename=\"excel.xls\"");

         ##############User
      	$res_user = mysql_query("SELECT DISTINCT bearbeiter FROM projekt_bearbeitung WHERE datum LIKE '$_REQUEST[jahr]-__-__'");
      	$user = Array();
      	$user_anzahl = mysql_num_rows($res_user);
      	while($res_user_fertig = mysql_fetch_array($res_user))
      	{
      	 array_push($user,$res_user_fertig['bearbeiter']);
     	}
    	$eingabe = "		";
    	for($i=0; $i<$user_anzahl; $i++)
    	{
       	 $eingabe .= "$user[$i]	";
      	}
      	$eingabe .= "\r\n";
      	$file = fopen("test.csv", "a+");
      	fputs($file, $eingabe);
      	##################

      	##########Projekte
      	$res_projekte = mysql_query("SELECT DISTINCT projektname FROM projekt_bearbeitung WHERE datum LIKE '$_REQUEST[jahr]-__-__'");
      	$projekte = Array();
      	$projekte_anzahl = mysql_num_rows($res_projekte);
      	while($res_projekte_fertig = mysql_fetch_array($res_projekte))
      	{
      	 array_push($projekte,$res_projekte_fertig['projektname']);
      	}

      	for($i=0; $i<$projekte_anzahl; $i++)
      	{
       	 $eingabe = "$projekte[$i]\r\n";
       	 $res_akt = mysql_query("SELECT DISTINCT aktivitaeten_name FROM projekt_bearbeitung WHERE datum LIKE '$_REQUEST[jahr]-__-__' AND projektname='$projekte[$i]' ORDER BY aktivitaeten_name");
       	 $akt = Array();
       	 $akt_anzahl = mysql_num_rows($res_akt);
       	 while($res_akt_fertig = mysql_fetch_array($res_akt))
       	 {
       	  array_push($akt,$res_akt_fertig['aktivitaeten_name']);
       	 }
       	 for($x=0; $x<$akt_anzahl; $x++)
       	 {
       	  $eingabe .= "	$akt[$x]";

        	  for($y=0; $y<$user_anzahl; $y++)
        	  {
            $res_aufwand = mysql_query("SELECT sum(aufwand) FROM projekt_bearbeitung WHERE datum LIKE '$_REQUEST[jahr]-__-__' AND aktivitaeten_name='$akt[$x]' AND bearbeiter='$user[$y]'");
            $aufwand2 = mysql_fetch_row($res_aufwand);
            $aufwand_anzahl = mysql_num_rows($res_aufwand);
            $aufwand2[0] = round($aufwand2[0],2);
            $aufwand2[0] = str_replace(".",",", $aufwand2[0]);
            $eingabe .= "	$aufwand2[0]";
        	  }
           $eingabe .= "\r\n";
          }
          $file = fopen("test.csv", "a+");
          fputs($file, $eingabe);
         }

         if($file)
         {
          fclose($file);
         }


  	readfile("test.csv");
 
kommando zurück!

es klappt jetzt. war mein fehler.

danke für die hilfe!


noch eine letzte frage:
es ist nicht möglich über csv format-attribute(fett, farbe, bg, etc.) zu übertragen?
irgendeine idee wie man das realisieren könnte?
 
Zurück