我将使用PHP将SQL中的数据导出到Excel(csv)。我可以将所有数据从SQL导出到Excel,但它是未知的日语。现在,我可以解决它;但其他问题是SQL中的每一行都会导出到Excel中的一列。
示例(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 東京
任何人都可以帮我解决这个问题吗?我很感谢你的帮助!
提前感谢。
答案 0 :(得分:3)
你在做什么已经是正确的。在Excel中导入csv文件时,请指定分隔符是逗号。或者,使用制表符作为分隔符代替逗号。
答案 1 :(得分: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创建机制可以毫无问题地处理此问题。
这种方法的另一个好处是,如果你有大量的数据,这将使用更少的内存,因为你一次只能在内存中保存一行数据(在输出它之前移动到下一个数据行。)
答案 2 :(得分:0)
使用\ t作为$ content变量来获取excel表的不同列中的数据
答案 3 :(得分:-2)
您需要使用;
而不是,
来分隔列。 “逗号分隔值”这个名称在这里有点误导。所以你会写:
while($row = mysql_fetch_array($user_query))
{
$contents.=$row['ccode'].";";
$contents.=$row['country']."\n";
}