0

一切正常,但我在将数据导出到 CSV 文件时遇到了问题。我尝试搜索类似的问题,但我没有找到任何可能与我的问题相关的问题。

这里的代码应该从 mySQL 数据库中导出整个数据库表。它做得很完美,但问题是,它将所有数据放在第一列 - 在不同的单元格中。单元格的位置没问题,但它应该将数据分布在几列(在我的例子中是 13 列)。

这是解释正在发生的事情的屏幕截图:

在此处输入图像描述 代码:

<?php
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: filename=export.csv");

#$query=mysql_query("set names 'utf8'");
#mb_http_output('UTF-8');
#mb_http_input('UTF-8');
#mb_language('uni');
#mb_regex_encoding('UTF-8');
#ob_start('mb_output_handler');
#header('Content-type: text/html; charset=utf-8');

$conn = mysql_connect('localhost', 'root', 'asdasd') or die(mysql_error());
mysql_select_db('nooruse', $conn) or die(mysql_error($conn));

$query = sprintf('SELECT osakond as Osakond, soetusaasta as Soetusaasta, it_number as IT_Number, tooteruhm as Tooteruhm, mudeli_nimetus as Mudeli_nimetus, sn as SN, riigivara_nr as Riigivara_nr, inventaari_nr as Inventari_nr, maja as Maja, ruum as Ruum, vastutaja as Vastutaja, markus as Markus,kasutajanimi as Kasutajanimi FROM norse5_proov');
$result = mysql_query($query, $conn) or die(mysql_error($conn));

$row = mysql_fetch_assoc($result);
if ($row) {
    echocsv(array_keys($row));
}

while ($row) {
    echocsv($row);
    $row = mysql_fetch_assoc($result);
}

function echocsv($fields)
{   
    $separator = '';
    foreach ($fields as $field) {
        if (preg_match('/\\r|\\n|,|"/', $field)) {
            $field = '"' . str_replace('"', '""', $field) . '"';
        }
        echo $separator . $field;
        $separator = ',';
    }
    echo "\r\n";
}

提前致谢。

4

1 回答 1

1

问题是您假设 Excel 知道分号是分隔符。

对于某些机器,这可能有效,而其他机器则不行。

有人建议这与列表分隔符下控制面板中的区域设置有关。

我发现了一个建议,将以下内容添加为 CSV 的第一行,以告诉 excel 使用什么分隔符:

九月=;

没试过这个,但它似乎是合法的。

这是一个更好描述的链接(有关在 CSV 文件中设置分隔符以避免客户端计算机更改的方法,请参阅第 3 条评论):

使用 Excel 打开 CSV 文件时遇到问题?由于欧洲的区域设置,Excel 中的逗号和分号问题

于 2013-03-19T09:18:44.400 回答