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.
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 ';'.Code:
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); }
Mais si je change cette partie
En ça :Code:
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.Code:
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); };
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.