fichier csv construit avec file_put_contents pas vu par excel comme un csv
Bonjour,
pour construire un fichier csv de test, je suis parti d'un fichier csv puis j'ai entouré chaque valeur par des doubles quotes (abcde=>"abcde") le tout en PHP. Mon souci est que excel ne le prend pas comme un fichier csv, car chaque ligne est affichée dans une cellule unique (les retours à la ligne sont corrects). Il y a probablement une erreur dans le code. Merci de me l'indiquer :
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
|
<!-- form to download a csv file from the hard disk -->
<form action="" method="post" enctype="multipart/form-data">
<label for="file2"><b>File CSV</b></label>
<input type="file" name="file2" id="file2"><br/>
<input type="submit" name="submitfile2" value="csv file download"><br/>
</form>
<?php
if (!defined('DIR_ROOT')) define('DIR_ROOT', dirname(__DIR__).DIRECTORY_SEPARATOR);
if (isset($_POST['submitfile2']))
{
//to put the file into an array ($data): each cell of the array contents a line of the csv file
if (!$_FILES['file2']["error"]) { //if not error
$upload_dir = 'csv';
$name=$_FILES['file2']['name'];
if ( false === $handle = fopen(DIR_ROOT.$upload_dir.DIRECTORY_SEPARATOR.$name, 'r') )
throw new Exception("impossible to open the file '$name'");
// one reads the header
$buffer = 4096;
if ( false === ($header = fgets($handle, $buffer)) )
throw new Exception("The file '$name' is empty");
// one tests different separators
$sep = ','; // by default
$separators = [',', ';'];
foreach ($separators as $separator) {
if ( strpos($header, $separator)> 0) {
$sep = $separator;
break;
}
}
function addDb($str)
{
return('"'.$str.'"');
}
while (false !== ($fields = fgetcsv($handle, $buffer, $sep)) ) {
$fields_convert=[];
foreach($fields AS $str_fields)
{
$str_fields=addDb($str_fields);
$fields_convert[]=$str_fields;
}
$line_csv=implode(",", $fields_convert);
file_put_contents('exemple.csv', $line_csv."\r\n", FILE_APPEND ); // serveur Windows , donc \r\n
}
} //end if not error
}
?> |
exemple de ligne résultat :
Citation:
"SESA100008","(none)","Software Engineering","SESA69723","CollabNet","TeamForge_Full","","TRUE","Jul 26, 2018","","","France","firstname1","lastname1","Schneider Electric France","TYS5","","Industry Business","CARROS HORIZON","firstname1.lastname1@schneider-electric.com","firstname2","lastname2","firstname2.lastname2@schneider-electric.com"