2013-09-30 3 views
2

Я собираюсь экспортировать данные в SQL в Excel (csv) с помощью PHP. Я могу экспортировать все данные из SQL в Excel, но это неизвестный японский язык. Пока я могу это решить; но другая проблема заключается в том, что каждая строка в SQL будет экспортироваться в один столбец в Excel.Экспорт данных из MySQL в Excel (csv) через PHP

Пример (данные в SQL)

ccode country 
US  United State 
UK  United Kingdom 
FR  France 
KO  Korea 
JP  東京 

После экспорта в Excel (CSV)

A     
1 ccode,country 
2 US,United State 
3 UK,United Kingdom 
4 FR,France 
5 KO,Korea 
6 JP,東京 

Вот мой код

<?php 

header("Content-type: text/csv; charset=UTF-8"); 
header('Content-Disposition: attachment; filename=Export.csv'); 
//connection 
$con = mysql_connect('localhost', 'root', ''); 
if(!$con){ 
    echo "Error connection"; 
} 
//select db 
$select_db = mysql_select_db('country', $con); 
if(!$select_db){ 
    echo "Error to select database"; 
} 
mysql_set_charset("utf8", $con); 

//Mysql query to get records from datanbase 
$user_query = mysql_query('SELECT * FROM countries'); 

//While loop to fetch the records 
$contents = "ccode,country\n"; 
while($row = mysql_fetch_array($user_query)) 
{ 
    $contents.=$row['ccode'].","; 
    $contents.=$row['country']."\n"; 
} 

$contents_final = chr(255).chr(254).mb_convert_encoding($contents, "UTF-16LE","UTF-8"); 
print $contents_final; 

?> 

Вот что я хочу после экспорта в Excel (CSV)

A   B 
1 ccode  country 
2 US   United State 
3 UK   United Kingdom 
4 FR   France 
5 KO   Korea 
6 JP   東京 

Может кто-нибудь помочь мне решить эту проблему? Я ценю вашу помощь!

Благодарим заранее.

ответ

-2

Вам нужно будет отделить ваши колонки от ;, а не от ,. Название «значения, разделенные запятыми», здесь немного вводит в заблуждение. Вы писали:

while($row = mysql_fetch_array($user_query)) 
{ 
    $contents.=$row['ccode'].";"; 
    $contents.=$row['country']."\n"; 
} 
+0

@downvoters: Что не так? – TheWolf

+0

Не работает, это становится «Великобритания, Великобритания» – user2738520

+0

Сепаратор на самом деле специфичен для локали в MS Excel; так что вкладка будет работать в некоторых локалях, в другой - в двоеточие. Нет универсального решения; хотя 'sep =;' как первая строка поможет, если вы используете; как разделитель –

3

Что вы делаете, это уже правильно. При импорте файла csv в Excel укажите, что символ разделителя является запятой. Кроме того, вместо запятой используйте символ табуляции в качестве разделителя.

+0

Теперь он работает.Спасибо за вашу помощь :) – user2738520

+0

Отметьте как ответьте пожалуйста. – Tarik

0

Вы действительно не должны заниматься созданием CSV вручную, как вы это делаете. Рассмотрите возможность использования fputcsv() сделать это:

//While loop to fetch the records 
fputcsv('php://output', array('ccode','country')); 
while($row = mysql_fetch_array($user_query, MYSQL_NUM)) { 
    array_walk($row, function(&$item) { 
      $item = mb_convert_encoding($item, "UTF-16LE","UTF-8"); 
    } 
    fputcsv('php://output', $row); 
} 

Отметим здесь, что я также делаю шаг кодирования по каждому отдельному значению поля.

Преимущество использования этого метода заключается в том, что он будет надлежащим образом прикрывать все ваши поля, если необходимо, чтобы некоторые значения не нарушали формат CSV. Например, если в одном из значений вашей базы данных содержится ,, ваш подход будет нарушен, тогда как использование надлежащего механизма создания csv позволит справиться с этим без проблем.

Еще одно преимущество этого подхода заключается в том, что если у вас большой набор данных, это будет использовать гораздо меньше памяти, поскольку вы будете хранить только одну строку данных в памяти за один раз (прежде чем вы вывести ее и переместить к следующей строке данных).

+0

Я проверю ваш код. Спасибо! – user2738520

0

use \ t для переменной $ content для получения данных в разных столбцах листа excel

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