2

PHP を使用して、SQL のデータを Excel (csv) にエクスポートします。SQL から Excel にすべてのデータをエクスポートできますが、不明な日本語です。今のところ、解決できます。しかし、他の問題は、SQL の各行が Excel の 1 つの列にエクスポートされることです。

例 (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

あなたがしていることはすでに正しいです。csv ファイルを Excel にインポートする場合は、区切り文字がカンマであることを指定します。または、カンマの代わりにタブ文字をセパレータとして使用します。

于 2013-09-30T16:42:45.900 に答える
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 形式を壊すのを防ぐために、必要に応じてすべてのフィールドを適切に囲むことです。たとえば、データベースの値の 1 つに が含まれている,場合、アプローチは壊れますが、適切な csv 作成メカニズムを使用すると問題なくこれを処理できます。

このアプローチのもう 1 つの利点は、大規模なデータ セットがある場合、(出力して次のデータに移動する前に) 一度に 1 行のデータのみをメモリに保持するため、メモリの使用量が大幅に削減されることです。行)。

于 2013-09-30T16:43:42.803 に答える
-2

;列をではなく で区切る必要があります,。「コンマ区切り値」という名前は、ここでは少し誤解を招きます。したがって、次のように記述します。

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