2

我将使用 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         東京

谁能帮我解决这个问题?我很感激你的帮助!

预先感谢。

4

4 回答 4

3

你所做的已经是正确的。在 Excel 中导入 csv 文件时,指定分隔符为逗号。或者,使用制表符代替逗号作为分隔符。

于 2013-09-30T16:42:45.900 回答
0

使用 \t 作为 $content 变量以获取 excel 表不同列中的数据

于 2013-11-07T07:00:56.877 回答
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 创建机制可以毫无问题地处理此问题。

这种方法的另一个额外好处是,如果您有大量数据,这将使用更少的内存,因为您一次只能在内存中保存一行数据(在输出它并移动到下一个数据之前排)。

于 2013-09-30T16:43:42.803 回答
-2

您需要用 a;而不是 a分隔列,。“逗号分隔值”这个名称在这里有点误导。所以你会写:

while($row = mysql_fetch_array($user_query))
{
    $contents.=$row['ccode'].";";
    $contents.=$row['country']."\n";
}
于 2013-09-30T16:29:57.907 回答