2013-03-19 2 views
0

Все работает отлично, но я столкнулся с проблемой, когда я экспортирую данные в файл CSV. Я попытался найти похожие проблемы, но я не нашел ничего, что могло бы иметь отношение к моей проблеме.CSV-вывод для нескольких столбцов

Этот код должен экспортировать всю таблицу базы данных из базы данных mySQL. Он делает это отлично, но дело в том, что он помещает все данные в первый столбец - в разные ячейки. Размещение ячейки в порядке, но предполагается распространение данных по нескольким столбцам (13 в моем случае).

Вот скриншот, чтобы объяснить, что происходит:

enter image description here Код:

<?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"; 
} 

Спасибо заранее.

+0

На моем взгляде выше кода работает отлично. Вы должны проверить свой разделитель csv в excel ....... –

ответ

1

Проблема заключается в том, что вы считаете, что Excel знает, что точка с запятой является разделителем.

Для некоторых машин это может сработать, а другие нет.

Было высказано предположение, что это связано с региональными настройками на панели управления в разделе «Сепаратор списка».

я нашел предложение, чтобы добавить следующее в качестве первой линии CSV, чтобы сказать, что первенствует сепаратор использовать:

Сентября =;

Не пробовал, но это кажется законным.

Вот ссылка на лучшее описание (см 3-й комментарий вниз по дороге, чтобы установить разделитель в файле CSV, чтобы избежать клиентского компьютера изменений):

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

+0

Разделитель должен быть запятой. Он говорит это в коде, и я проверил настройки excel. Поле «Использовать системные разделители» было отмечено. Я отмахивался от нее и заполнял «десятичный разделитель», чтобы быть «,», но это было бесполезно. Я попробую попробовать «sep :,». –

Смежные вопросы