Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

Delimiter export CSV sous EXCEL


Sujet :

Laravel PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    août 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : août 2019
    Messages : 20
    Points : 10
    Points
    10
    Par défaut Delimiter export CSV sous EXCEL
    Bonjour,
    Bonne année à tout le monde dans un premier temps.

    Je rencontre un léger bémol concernant un export CSV sous excel.
    Mon import fonctionne, pas de souci la dessus mais lorsque je l'ouvre avec excel, un problème survient au niveau des delimiter.
    Le delimiter par défaut d'excel est ';' hors comme vous allez le voir plus bas dans le code, les miens sont des virgules ','.
    En rajoutant les delimiter dans mon tableau d'en-tête puis dans les données elles même, le csv n'est vraiment pas jojo, dans l'en-tête les enclosure sont toujours présentes, ça fait vraiment pas propre, même problème avec les data.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    public function exportInterventionClient(Request $request)
        {
            $req = Intervention::getInterClient();
            //$req->where("itec_intervention.deleted", '=', '0');
            if ($request["num_inter_apporteur"] !== null)
                $req->where("num_inter_apporteur", '=', '' . $request["num_inter_apporteur"] . '');
            if ($request["id_interne"] !== null)
                $req->where("itec_intervention.id", '=', '' . $request["id_interne"] . '');
            if ($request["id_ticket"] !== null)
                $req->where("id_ticket", '=', '' . $request["id_ticket"] . '');
            if ($request["affectation"] !== null)
                $req->where("affectation", '=', $request["affectation"]);
            if ($request["date_debut"] !== null) {
                $date_explode = explode('-', $request['date_debut']);
                $req->where("planning_date_begin", '>', mktime(0, 0, 0, $date_explode[1], $date_explode[2], $date_explode[0]));
            }
            if ($request["date_fin"] !== null) {
                $date_explode = explode('-', $request['date_fin']);
                $req->where("planning_date_begin", '<', mktime(23, 59, 59, $date_explode[1], $date_explode[2], $date_explode[0]));
            }
            if ($request["societe"] !== null) {
                $req->where("societe", "like", "%" . $request["societe"] . "%");
            }
            if ($request["nom_client"] !== null)
                $req->where("nom_commercial", 'like', '%' . $request["nom_client"] . '%');
            if ($request["nom_intervenant"] !== null)
                $req->where("login_intervenant", 'like', '%' . $request["nom_intervenant"] . '%');
            if ($request["site"] !== null)
                $req->where("site", 'like', '%' . $request["site"] . '%');
            if ($request["cp"] !== null)
                $req->where("cp_site", 'like', $request["cp"] . '%');
            if ($request["statut"] !== null)
                $req->where("statut", "=", $request["statut"]);
     
            $reviews = $req->get();
            $name_file = "Interventions_" . date('dmY') . ".csv";
     
            $headers = array(
                "Content-type" => "text/csv",
                "Content-Disposition" => "attachment; filename=" . $name_file,
                "Pragma" => "no-cache",
                "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
                "Expires" => "0"
            );
            $columns = array('N° Intervention Apporteur', 'Id Ticket', 'Affectation', 'Dâte début', 'Dâte Fin','Société','Nom Client','Nom Intervenant','Site','Code Postal', 'Statut');
     
            $callback = function () use ($reviews, $columns) {
                $file = fopen('php://output', 'w');
     
                fputs($file, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
                fputcsv($file, $columns);
     
                foreach ($reviews as $review) {
                    fputcsv($file, array($review->num_inter_apporteur, $review->id_ticket, $review->affectation, htmlentities(date('d/m/Y',$review->planning_date_begin),ENT_QUOTES,'UTF-8'), htmlentities(date('d/m/Y',$review->planning_date_begin),ENT_QUOTES,'UTF-8'), $review->societe, $review->nom_commercial, $review->login_intervenant, $review->site, $review->cp_site, $review->libelle_statut));
                }
                fclose($file);
            };
     
            return response()->stream($callback, '200', $headers);
        }
    Dans cet fonction les enclosure sont des virgules, si je l'ouvre avec Excel, ça fail, normal vu qu'il prends en compte seulement les ';'.

    Mais si je change cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $columns = array('N° Intervention Apporteur', 'Id Ticket', 'Affectation', 'Dâte début', 'Dâte Fin','Société','Nom Client','Nom Intervenant','Site','Code Postal', 'Statut');
     
            $callback = function () use ($reviews, $columns) {
                $file = fopen('php://output', 'w');
     
                fputs($file, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
                fputcsv($file, $columns);
     
                foreach ($reviews as $review) {
                    fputcsv($file, array($review->num_inter_apporteur, $review->id_ticket, $review->affectation, htmlentities(date('d/m/Y',$review->planning_date_begin),ENT_QUOTES,'UTF-8'), htmlentities(date('d/m/Y',$review->planning_date_begin),ENT_QUOTES,'UTF-8'), $review->societe, $review->nom_commercial, $review->login_intervenant, $review->site, $review->cp_site, $review->libelle_statut));
                }
                fclose($file);
            };
    En ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $columns = array('N° Intervention Apporteur', ';Id Ticket', ';Affectation', ';Dâte début', ';Dâte Fin',';Société',';Nom Client',';Nom Intervenant',';Site',';Code Postal', ';Statut');
     
            $callback = function () use ($reviews, $columns) {
                $file = fopen('php://output', 'w');
     
                fputs($file, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
                fputcsv($file, $columns);
     
                foreach ($reviews as $review) {
                    fputcsv($file, array($review->num_inter_apporteur.';'. $review->id_ticket.';'. $review->affectation.';'. htmlentities(date('d/m/Y',$review->planning_date_begin),ENT_QUOTES,'UTF-8').';'. htmlentities(date('d/m/Y',$review->planning_date_begin),ENT_QUOTES,'UTF-8').';'. $review->societe.';'. $review->nom_commercial.';'. $review->login_intervenant.';'. $review->site.';'. $review->cp_site.';'. $review->libelle_statut));
                }
                fclose($file);
            };
    Les enclosure sont toujours présentes et au niveau des dates (qui ne sont pas finies au passage) les data qui suivent sont sur la même ligne (ou colonne) donc ça fail.

    Si une personne peut m'expliquer le pourquoi du comment ou du moins m'aiguiller, ça serait fort sympathque.
    Merci de m'avoir lu.
    gl/hf.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    août 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : août 2019
    Messages : 20
    Points : 10
    Points
    10
    Par défaut Done
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
    public function exportCSV(Request $request)
        {
            $req = Intervention::getListe();
            //$req->where("itec_intervention.deleted", '=', '0');
            if ($request["num_inter_apporteur"] !== null)
                $req->where("num_inter_apporteur", '=', '' . $request["num_inter_apporteur"] . '');
            if ($request["id_interne"] !== null)
                $req->where("itec_intervention.id", '=', '' . $request["id_interne"] . '');
            if ($request["id_ticket"] !== null)
                $req->where("id_ticket", '=', '' . $request["id_ticket"] . '');
            if ($request["affectation"] !== null)
                $req->where("affectation", '=', $request["affectation"]);
            if ($request["date_debut"] !== null) {
                $date_explode = explode('-', $request['date_debut']);
                $req->where("planning_date_begin", '>', mktime(0, 0, 0, $date_explode[1], $date_explode[2], $date_explode[0]));
            }
            if ($request["date_fin"] !== null) {
                $date_explode = explode('-', $request['date_fin']);
                $req->where("planning_date_begin", '<', mktime(23, 59, 59, $date_explode[1], $date_explode[2], $date_explode[0]));
            }
            if ($request["societe"] !== null) {
                $req->where("societe", "like", "%" . $request["societe"] . "%");
            }
            if ($request["nom_client"] !== null)
                $req->where("nom_commercial", 'like', '%' . $request["nom_client"] . '%');
            if ($request["nom_intervenant"] !== null)
                $req->where("login_intervenant", 'like', '%' . $request["nom_intervenant"] . '%');
            if ($request["site"] !== null)
                $req->where("site", 'like', '%' . $request["site"] . '%');
            if ($request["cp"] !== null)
                $req->where("cp_site", 'like', $request["cp"] . '%');
            if ($request["statut"] !== null)
                $req->where("statut", "=", $request["statut"]);
     
            $reviews = $req->get()->toArray();
     
            $customer_array[] = array('N° Intervention Apporteur',' Id Ticket',' Affectation',' Dâte début',' Dâte Fin','Société','Nom Client','Nom Intervenant','Site','Code Postal',' Statut');
            foreach($reviews as $review)
            {
                $customer_array[] = array(
                    'N° Intervention Apporteur'     => $review->num_inter_apporteur,
                    'Id Ticket'                     => $review->id_ticket,
                    'Affectation'                   => $review->affectation,
                    'Date début'                    => $review->planning_date_begin,
                    'Date Fin'                      => $review->planning_date_begin,
                    'Société'                       => $review->societe,
                    'Nom Client'                    => $review->nom_commercial,
                    'Nom Intervenant'               => $review->login_intervenant,
                    'Site'                          => $review->site,
                    'Code Postal'                   => $review->cp_site,
                    'Statut'                        => $review->libelle_statut
                );
            }
     
            Excel::create('Customer Data', function($excel) use ($customer_array){
                $excel->setTitle('Customer Data');
                $excel->sheet('Customer Data', function($sheet) use ($customer_array){
                    $sheet->fromArray($customer_array, null, 'A1', false, false);
                });
            })->download('xlsx');
        }
    gl/hf

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Import CSV sous Excel, garder les 0 inutile
    Par ePoX dans le forum Excel
    Réponses: 4
    Dernier message: 26/01/2009, 17h25
  2. [VBA ACCESS]Export Table sous Excel
    Par mathieu44800 dans le forum VBA Access
    Réponses: 2
    Dernier message: 14/02/2008, 15h57
  3. [VBA Access] Export Table sous Excel avec fenetre de dialogue
    Par trihanhcie dans le forum VBA Access
    Réponses: 4
    Dernier message: 13/07/2007, 15h14
  4. Réponses: 1
    Dernier message: 26/03/2007, 11h47
  5. [CSV] export CSV sous IE
    Par Rawone dans le forum Langage
    Réponses: 2
    Dernier message: 24/10/2006, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo