2013-03-19 5 views
0

Tout fonctionne parfaitement, mais j'ai rencontré un problème lors de l'exportation de données vers un fichier CSV. J'ai essayé de chercher des problèmes similaires, mais je n'ai pas trouvé tout ce qui pourrait être pertinent à mon problème.Sortie CSV sur plusieurs colonnes

Ce code est supposé exporter la base de données entière de la base de données mySQL. Il le fait parfaitement mais la chose est, il met toutes les données dans la première colonne - dans des cellules différentes. Le placement des cellules est correct mais il est supposé répartir les données sur plusieurs colonnes (13 dans mon cas).

Voici la capture d'écran est d'expliquer ce qui se passe:

enter image description here code:

<?php 
header("Content-type: application/vnd.ms-excel"); 
header("Content-disposition: filename=export.csv"); 

#$query=mysql_query("set names 'utf8'"); 
#mb_http_output('UTF-8'); 
#mb_http_input('UTF-8'); 
#mb_language('uni'); 
#mb_regex_encoding('UTF-8'); 
#ob_start('mb_output_handler'); 
#header('Content-type: text/html; charset=utf-8'); 

$conn = mysql_connect('localhost', 'root', 'asdasd') or die(mysql_error()); 
mysql_select_db('nooruse', $conn) or die(mysql_error($conn)); 

$query = sprintf('SELECT osakond as Osakond, soetusaasta as Soetusaasta, it_number as IT_Number, tooteruhm as Tooteruhm, mudeli_nimetus as Mudeli_nimetus, sn as SN, riigivara_nr as Riigivara_nr, inventaari_nr as Inventari_nr, maja as Maja, ruum as Ruum, vastutaja as Vastutaja, markus as Markus,kasutajanimi as Kasutajanimi FROM norse5_proov'); 
$result = mysql_query($query, $conn) or die(mysql_error($conn)); 

$row = mysql_fetch_assoc($result); 
if ($row) { 
    echocsv(array_keys($row)); 
} 

while ($row) { 
    echocsv($row); 
    $row = mysql_fetch_assoc($result); 
} 

function echocsv($fields) 
{ 
    $separator = ''; 
    foreach ($fields as $field) { 
     if (preg_match('/\\r|\\n|,|"/', $field)) { 
      $field = '"' . str_replace('"', '""', $field) . '"'; 
     } 
     echo $separator . $field; 
     $separator = ','; 
    } 
    echo "\r\n"; 
} 

Merci à l'avance.

+0

Selon moi, le code ci-dessus fonctionne correctement.Vous devez vérifier votre délimiteur csv dans Excel ....... –

Répondre

1

Le problème est que vous supposez qu'Excel sait qu'un point-virgule est le séparateur.

Pour certaines machines cela peut fonctionner, d'autres non.

Il a été suggéré que cela avait à voir avec le réglage régional dans le panneau de commande sous Séparateur de liste.

J'ai trouvé une suggestion d'ajouter ce qui suit comme la première ligne du CSV pour Excel dire ce séparateur à utiliser:

sep =;

N'ont pas essayé ceci, mais il semble légitime.

Voici un lien vers une meilleure description (voir le 3e commentaire vers le bas pour la façon de définir le séparateur dans le fichier CSV pour éviter les changements d'ordinateur client):

Trouble with Opening CSV Files with Excel? The Comma and Semicolon Issue in Excel due to Regional Settings for Europe

+0

Le séparateur est censé être une virgule. Il le dit dans le code et j'ai vérifié les paramètres Excel. La case "Utiliser les séparateurs système" a été cochée. Je l'ai décoché et j'ai rempli le "séparateur décimal" pour être "," mais ce n'était pas bon. Je vais essayer le "sep:". –