1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

CSV Datei in Excel ausgeben und filtern

Dieses Thema im Forum "PHP" wurde erstellt von JQCan, 20. Dezember 2016.

  1. JQCan

    JQCan Mitglied

    Hi,

    Ich komme nicht weiter und bräuchte einige Hilfe.

    Mein Code:

    PHP:
    1. <?php
    2.  
    3.             $row = 1;                                  
    4.             $handle = fopen ("beispiel2.csv","r");          
    5.             while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) {
    6.  
    7.                $num = count ($data);                  
    8.                print "<p> $num fields in line $row: <br>\n";
    9.                $row++;                                
    10.                for ($c=0; $c < $num; $c++) {        
    11.                    print $data[$c] . "<br>\n";        
    12.                }
    13.             }
    14.             fclose ($handle);
    15.  
    16.             ?>
    Die CSV Datei wird richtig ausgelesen. Der gibt mir die Richtigen Zeilen und die Spalten dazu. Nur möchte ich das er mir die 1. Spalte filtert. Z.b. Die erste Zeile ist "ArtikelNumberCustomer". Wird in "Pizza123", "Döner123", "Pizza134", u.s.w. dargestellt. Und ich möchte das in einer Excel Datei mir alle die mit Pizza... anfangen zusammen filtert und ausgibt. Wie kann ich das hinbekommen?

    Gruß
    JQCan
     
  2. Yaslaw

    Yaslaw n/a Moderator

    Eine Spalte wird in Pizza und Döner dargestellt? Also als Kuchendiagramm? Sorry, ich verstehe nicht was du da hast und was du willst.
    Mach bitte mal ein Beispiel. WIe sieht das CSV aus. Und was willst du als Resultat (in tabelarischer Form).

    Und sehe ich das Richtig? Das Resultat soll nicht angezeigt werden sondern das eine Exceldatei (Endung .xlsx) erstellt wird?
     
  3. JQCan

    JQCan Mitglied

    Genau. Es wird eine Spalte die heißt ArtikelNumberCustomer als "Pizza123", "Döner123", Pizza132", Pizza223, "Pasta000", "Döner444" dargestellt. In CSV Datei!
    Ich möchte jetzt das die Werte die in CSV Datei sind in einer Exceldatei (Endung .xlsx) erstellt. Richtig. Aber Ich habe als dropdown menü Customer, da sind aufgelistet "Pizza", "Döner", Pasta", "Salat". Und wenn ich im Dropdown die "Pizza" wähle und denn den Button "Datei als Excel erstellen" klicke, soll der mir aus der CSV Datei nach Customer Pizza filtern und ausgeben in einer .xlsx. Wäre das denn machbar?
    Habe eine Übung in der Uni bekommen und kriege dies nicht so ganz hin.

    Die CSV Datei: (ich habe dies etwas verkürzt)
    ArtikelNumberCustomer, ArtikelPreis, ArtikelZutaten, ArtikelExtrasBeilagen
    "Pizza123, 12.22, Thunfisch, Mais"
    "Pizza223, 4.50, Salami, Mais"
    "Döner123, 3.50, Lammfleisch, Peperonie"
    "Salat998, 8.99, Eier, Frühlingszwiebeln"
     
  4. Yaslaw

    Yaslaw n/a Moderator

    Für die Filterung habe ich dir eine Möglichkeit.
    Ich habe in meiner Testumgebung nicht die Möglichkeit Dateien zu hinterlegen. Darum ist meine CSV alsVariable drin.
    Ab $data kannst du sozusagen übernehmen

    Code (PHP):
    1. <pre>
    2. <?php
    3. //Test-CSV
    4. $txt = <<<TXT
    5. ArtikelNumberCustomer,Anzahl
    6. Pizza123,1
    7. Döner456,2
    8. Pizza789,5
    9. TXT;
    10.  
    11. //Testeingabe
    12. $search = 'Pizza';
    13.  
    14. $rows = explode("\n", $txt);
    15. $result = array();
    16. //Header auslesen
    17. $result[] = str_getcsv($rows[0], ',');
    18.  
    19. //Daten durchiterieren
    20. foreach($rows as $line){
    21.     $data = str_getcsv($line, ',');
    22.     if(preg_match("/^{$search}/i", $data[0])) $result[] = $data;
    23. }
    24.  
    25. var_dump($result);
    26.  
    27. ?>
    28. </pre>
    Testresultat
    Code (Text):
    1. array(3) {
    2.   [0]=>
    3.   array(2) {
    4.     [0]=>
    5.     string(21) "ArtikelNumberCustomer"
    6.     [1]=>
    7.     string(6) "Anzahl"
    8.   }
    9.   [1]=>
    10.   array(2) {
    11.     [0]=>
    12.     string(8) "Pizza123"
    13.     [1]=>
    14.     string(1) "1"
    15.   }
    16.   [2]=>
    17.   array(2) {
    18.     [0]=>
    19.     string(8) "Pizza789"
    20.     [1]=>
    21.     string(1) "5"
    22.   }
    23. }
    Und wie du das ins Excel bringst, gibt es diverse Anleitungen und dazu passende Bibliotheken im Netz. Google nach 'php export to xlsx'
     
  5. JQCan

    JQCan Mitglied

    Einen Guten Rutsch wünsche ich euch allen!

    Vielen Dank Yaslaw!

    Ich habe einiges ausprobiert.
    Mein Code:
    Code (Text):
    1. if ( ($datei = fopen("test.csv", "r")) != FALSE) {
    2.                 //Für jede Zeile die fgetcsv zurückgibt
    3.                 while (($zeile = fgetcsv($datei, 1000, ",")) != FALSE) {
    4.                  
    5.                     $search = 'Pizza';  
    6.                     $result = array();
    7.                  
    8.                     //Header auslesen
    9.                     $result[] = str_getcsv($zeile[0], ',');
    10.                     //Daten durchiterieren
    11.                     foreach ($zeile as $line) {
    12.                         $data = str_getcsv($line, ',');
    13.                         if (preg_match("/^{search}/i", $data[0]))
    14.                             $result[] = $data;
    15.                     }
    16.                  
    17.                     var_dump($result);
    18.                 }
    19.                 //Datei schliesen
    20.                 fclose($datei);
    21.             }
    22.  
    Meine kleine test.csv sieht so auch:
    Code (Text):
    1. ArtikelNumber Customer,ArtikelPreis,ArtikelZutaten,SKU,ArtikelExtrasBeilagen
    2. "Pizza123,""12,22 €"",Thunfisch,Mais"
    3. "Salat103,""12,50 €"",Thunfisch,Frühlingszwiebeln"
    4. "Pizza223,""4,50 €"",Salami,Mais"
    5. "Salat123,""8,50 €"",Eier,Frühlingszwiebeln"
    Nur ich kann nicht ganz verstehen, wieso mir alle Daten ausgibt.
    Meine Ausgabe:
    Code (Text):
    1. array(1) { [0]=> array(1) { [0]=> string(22) "ArtikelNumber Customer" } } array(1) { [0]=> array(4) { [0]=> string(8) "Pizza123" [1]=> string(10) "12,22 €" [2]=> string(9) "Thunfisch" [3]=> string(4) "Mais" } } array(1) { [0]=> array(4) { [0]=> string(8) "Salat103" [1]=> string(9) "12,50 €" [2]=> string(9) "Thunfisch" [3]=> string(18) "Frühlingszwiebeln" } } array(1) { [0]=> array(4) { [0]=> string(8) "Pizza223" [1]=> string(8) "4,50 €" [2]=> string(6) "Salami" [3]=> string(4) "Mais" } } array(1) { [0]=> array(4) { [0]=> string(8) "Salat123" [1]=> string(8) "8,50 €" [2]=> string(4) "Eier" [3]=> string(18) "Frühlingszwiebeln" } }
    Kann mir einer helfen?

    Danke euch!

    LG
    JQCan
     
  6. Yaslaw

    Yaslaw n/a Moderator

    beim preg_match hast du vor search ein $ vergessen. SO wird nie nach deinen Suchbegriff gesucht.

    Du hast allgemein ein Chaos. Das sollte glaub etwa reichen
    Code (PHP):
    1. $datei = fopen("test.csv", "r")
    2.  
    3. //Suchbegriff und Resultat-Array vor der Schleife definieren
    4. $search = 'Pizza';  
    5. $result = array();
    6. //Für jede Zeile die fgetcsv zurückgibt
    7. while ($data  = fgetcsv($datei, 1000, ',', '"')) !== FALSE) {
    8.     //In jeder Zeil prüfen, ob die Spalte 0 dem Suchbegriff entspricht
    9.     if (preg_match("/^{$search}/i", $data [0])) $result[] = $data ;
    10. }
    11. //Datei schliesen
    12. fclose($datei);
     
  7. JQCan

    JQCan Mitglied

    Danke dir!

    Habe dies mal ausprobiert, aber irgendwie gibt der mir Array(0) {} aus.

    Ich habe mal komplett anders implementiert und dies scheint auch zu funktionieren. Nur liegt jetzt das Problem bei den Euro-Zeichen.

    Hier mein neuer Code:
    PHP:
    1. if ( ($datei = fopen("test.csv", "r")) != FALSE) {
    2.                  $fp = fopen('test.csv', 'w');
    3.                  
    4.                 //Für jede Zeile die fgetcsv zurückgibt
    5.                 while (($zeile = fgetcsv($datei, 1000, ",")) != FALSE) {
    6.                
    7.                  $anzahlSpalten = count($zeile);
    8.                
    9.                    for ($c = 0; $c < $anzahlSpalten; $c++) {
    10.          
    11.                                 if (preg_match('/^Pizza/i', $zeile[$c]) > 0) {
    12.                                     $data[$c] = utf8_decode($zeile[$c]); //Umlaute müssen richtig importiert werden
    13.                                     $current .= fputcsv($fp, $data);
    14.                                 }
    15.                     }
    16.                 }
    17.                 //Datei schliesen
    18.                 fclose($datei);
    19.             }
    Jetzt gibt er mir die Pizzen in test.csv richtig aus. Nur das Problem ist jetzt beim "€". ich bekomme eine Ausgabe: "12,22 ?"
    Wie kann ich das Euro-Zeichen richtig ausgeben? Die Ergebnisse können als CSV oder Excel Datei heruntergeladen werden! Ich habe dies in CSV geschrieben.
    Ich habe nach dem Problem gegoogelt. Und einiges ausprobiert, aber bin nicht mehr schlauer geworden. Es liegt wohl an dem "fputcsv". Dies wird nicht richtig kodiert.
    Mit iconv() hat es auch nicht funktioniert. :(

    LG
     
  8. Yaslaw

    Yaslaw n/a Moderator

    Du hast test.csv 2 mal geöffnet. Einmal Lesen und einmal schreiben. Nicht nett.

    Im If würde ich den for verlassen (break;). Wenn Pizza in 2 Feldern vorkommt, so schreibt es die Zeile 2 mal in die Zieldatei.

    Sorrym beim eigentlichen €-Problem kann ich nicht helfen. Ich habe kein PHP zur Hand.
     
  9. JQCan

    JQCan Mitglied

    Ach ohjeee... stimmt. Normal sollten die beiden test.csv Dateien nicht für Schreiben und Lesen zusammen geschehen.
    Ok!
    hmm wegen dem €-Problem werde ich nicht fundig :(

    Hoffe es kann mir einer ein Tipp geben.
     
  10. JQCan

    JQCan Mitglied

    Problem gelöst.
    Habe dies mit der "mb_convert_encoding()" gelöst. Jetzt werden Umlaute und € Zeichen richtig als csv Datei ausgegeben.

    Danke nochmals an alle die mir etwas geholfen haben!
     
Die Seite wird geladen...