2015-09-03 3 views
0

При попытке сгенерировать CSV я хотел отделить данные в нескольких столбцах, однако я вижу только данные в A1, A2, A3 Столбцы не в б или C.fputcsv более одного столбца (котировки)

Любой путь, как чтобы исправить это?

Я хочу имя X, возраст X и город X в трех раздельных колонках

Это пример кода:

header("Content-Type: text/csv"); 
header("Content-Disposition: attachment; filename=file.csv"); 
// Disable caching 
header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1 
header("Pragma: no-cache"); // HTTP 1.0 
header("Expires: 0"); // Proxies 

function outputCSV($data) { 
    $output = fopen($_SERVER['DOCUMENT_ROOT']."/Project_X/trunk/output/test.csv", 'w'); 
    foreach ($data as $row) { 
     fputcsv($output, $row); // here you can change delimiter/enclosure 
    } 
    fclose($output); 
} 

outputCSV(array(
    array("name 1", "age 1", "city 1"), 
    array("name 2", "age 2", "city 2"), 
    array("name 3", "age 3", "city 3") 
)); 

Edit: Функция тестирования:

$output = fopen($_SERVER['DOCUMENT_ROOT']."/Project_X/trunk/output/test.csv", 'w'); 
fputcsv($output, array("hallo;123;4"),";"); // here you can change delimiter/enclosure 
fclose($output); 

Результаты в виде файла : «hallo; 123; 4» вместо hallo; 123; 4

Решено:

$array = array("hallo;123;4"); 
$array = str_replace('"', '', $array); 
fputcsv($output, $array); 
+2

Как вы смотрите на сгенерированный файл? Вы понимаете, что MS Excel использует локальный специфический разделитель при чтении файла csv, поэтому иногда вам может понадобиться использовать ';', somethimes a ',', в зависимости от настроек локали версии MS Excel, которые используются для просмотра файл, который вы производите –

+1

Одним из решений этого является «рассказать» MS Excel о том, какой разделитель используется; сделать первую строку файла 'sep =,' .... но это будет нехорошо, если файл используется в другом месте по сценариям импортера. –

+0

Спасибо за комментарии. на языковых настройках, однако его запись «test; 1; 2; 3» вместо теста; 1; 2; 3 (без кавычек)? Я повторно отредактировал сообщение и добавил тестовую функцию. – David

ответ

2

Вы получаете эту проблему, потому что массив, который вы отправляете в функцию fputcsv, имеет только один элемент.

Если вы передадите массив как: массив («hallo», «123», «1»), то он поместит каждый элемент массива в соответствующие столбцы.

функция fputcsv принимает и массивы отдельных элементов, а не одну строку данных, а затем разделитель для использования. В вашем случае - двоеточие. Правильное использование, используя массив выше, будет: fputcsv($output, array("hallo", "123", "1"), ';');

То есть: файл обработчик файла, массив отдельного элемента, а не массив с каскадной строкой, а затем сепаратор для использования в файл (запятая будет использоваться, если здесь ничего не задано).