【问题标题】:Opening a CSV file created by PHP打开由 PHP 创建的 CSV 文件
【发布时间】:2017-06-15 12:14:39
【问题描述】:

我在 PHP 中使用 fputcsv 创建了一个 CSV 文件。文件创建成功,我可以在 MacOS 中毫无问题地打开文件。 (我在 MacOS 中使用数字)。问题出在 Microsoft Excel 中,它显示所有行合并为一列。

我将分隔符设置为“;”在代码中。

当我按照 Microsoft 文档中的说明检查 Language and Regional Settings 时,分隔符也是“;”。

我还应该检查什么? 谢谢。

【问题讨论】:

  • MacOs 和 Win \r\n\n 中的不同换行可能是问题所在。默认值是(据我所知):Win \r\n Linux \n Mac \r
  • this 可能会有所帮助。
  • 您是否将列分隔符设置为; 或行分隔符设置为;
  • 你说的是在 MAC Excel 还是 Windows Excel 上打开 csv?

标签: php excel csv


【解决方案1】:

这个标题将允许 csv 格式正确显示。

 header('Content-Encoding: UTF-8');
    header('Content-type: text/csv; charset=UTF-8');
    header('Content-Disposition: attachment; filename=filename.csv');
    echo "\xEF\xBB\xBF";

你可以使用这个标题

【讨论】:

  • 您能否解释一下为什么这会解决打开 .csv 文件的问题?
  • 那么也许你应该建议这个问题有重复
  • ALSO:OP 为什么要“使用此代码”? 好的答案将始终解释所做的事情以及这样做的原因,不仅适用于 OP,而且适用于可能会发现此问题并正在阅读您的答案的 SO 的未来访问者。他们也可能会倾向于给它一个赞成票
【解决方案2】:

以下方法似乎对我有用。 Microsoft Excel 完美打开。

$filePath = '/home/user/';
$filename = 'test.csv';

$df = fopen($filePath.$filename, 'w');
fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF));
fputcsv($df, $dataColumns);
foreach ($dataArray as $dataRow) {
    fputcsv($df, $dataRow);
}
fclose($df);

// Output csv
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename='.$filename);
header("Cache-Control: no-store, no-cache");
readfile($filePath.$filename);

注意事项

  • fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF)); 行写入文件头以进行正确编码。
  • 可以使用fputcsv(...)的第三个参数来设置分隔符。

【讨论】:

  • 它完全可以为你打开它。 MS Excel 是特定于区域设置的分隔符使用;对一个地区的一个人有用的东西不一定适用于另一个地区的另一个人
猜你喜欢
  • 2013-03-08
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 2016-12-06
  • 2013-06-24
  • 2023-04-02
相关资源
最近更新 更多