我使用通用算法编写理论上适用于主要OS的CSV文件。但是,客户端在几周前开始使用Mac,并且他们不断告诉我在Microsoft Excel 2008 for Mac 12.2.1中无法读取CSV文件。

他们将操作系统配置为使用“分号”;作为列表分隔符,这正是我在CSV中编写的内容。他们还说,当他们在记事本中打开文件时,他们注意到没有换行符,所有内容都显示在一行中。这就是Excel无法正确读取文件的原因;但是在我的代码中,我正在使用跨浏览器换行符\r\n

这是我使用的完整代码:

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
// Output to browser with appropriate mime type, you choose ;)
header("Content-type: text/x-csv");
//header("Content-type: text/csv");
//header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=participantes.csv");

$separator = ";";
$rs = $sql->doquery("SELECT A QUERY TO RETRIEVE DATA FROM THE DB");

$header = "";
$num_fields = mysql_num_fields($rs);

for($i=0; $i<$num_fields; $i++){
  $field = mysql_field_name($rs, $i);
  $header .= $field.$separator;
}

echo $header."\r\n";

while($row = $sql->fetch($rs)){
  $str = "";
  for($i=0; $i<$num_fields; $i++){
    $field = mysql_field_name($rs, $i);
    $value = str_replace(";", ",", $row->{$field});
    $value = str_replace("\n", ",", $value);
    $value = str_replace("\d", ",", $value);
    $value = str_replace(chr(13), ",", $value);
    $str .= $value.$separator;
  }
  echo $str."\r\n";
}


有什么我可以做的,以便Mac用户可以正确读取文件吗?

最佳答案

出于调试目的:


创建一个CSV文件,然后通过邮件发送给他们。他们可以打开它吗?
让他们从您的页面下载文件,然后将其发送回给您。比较十六进制编辑器中的文件,以排除它们看上去不同于发送给浏览器或保存的文件的可能性。
让他们仔细检查其Excel设置。
让他们从头开始创建有效的CSV文件(在Mac上为文本编辑器),并找出与您的方法不同的地方。

10-05 20:31
查看更多