excel utf-8 csv导出和分隔符

时间:2013-01-24 17:03:47

标签: php excel drupal csv utf-8

所以我做了这个(我使用Drupal 6):

  while(@ob_end_clean());
  drupal_set_header("Content-type: text/csv;");
  drupal_set_header("Cache-Control: no-store, no-cache");
  drupal_set_header("Content-Disposition: attachment; filename=translations.csv");
  print chr(255) . chr(254) . mb_convert_encoding($output, 'UTF-16LE', 'UTF-8');
  exit;

导出utf-8字符的CSV。当我导入excel时,utf-8字符会正确显示。

问题是,excel不会解析分隔符,即逗号将全部显示在一列中,而不是在打开文件时用作分隔符。

有没有办法让它在打开时,逗号将用作分隔符?

csv中的一行如下:

$output .= '"'.str_replace('"', '""', $id).'","'.str_replace('"', '""', $source).'","'.str_replace('"', '""', $translation) . '"';

我尝试使用tabs \ t而不是逗号作为分隔符,但同样的事情会发生,即。标签不会在文件打开时用作分隔符

3 个答案:

答案 0 :(得分:1)

如果您使用Excel 2007,那么如果您先打开Excel,那么您可以转到Data标签,然后选择From Text

在资源管理器浏览器中选择.csv文件,然后会出现文本向导。这为您提供了更多的步骤和选项来控制它们在拆分列等方面所寻找的内容。

较早版本的Excel也支持它,但我不能确定它在同一个地方,我认为它是。

尝试该向导,看看它是如何排序您的问题的。

答案 1 :(得分:1)

要将逗号用作默认CSV分隔符,需要更改相应的Windows区域设置选项:

  

转到“控制面板” - >区域和语言选项(或日期,   时间和地区选择 - >一些区域和语言选择   机器) - >单击“自定义”按钮。在打开的对话框中   您将看到可以更改的“列表分隔符”选项   逗号到另一个角色 - >单击Apply然后单击Ok   再次申请。

请注意以下事项:

  1. 默认情况下,此设置用于BOTH CSV导入和导出。
  2. 您应该使用File > Open,而不是Data > Import External Data > Import Data...打开CSV文件,或者只需双击资源管理器中的任何CSV,它将在Excel中打开并应用默认分隔符。
  3. 了解更多:

答案 2 :(得分:0)

对于带有x分隔值的Excel的Unicode支持,请使用制表符分隔的UTF-16 Little-Endian(当您另存为时生成的内容> Unicode文本(* .txt)的)。

如果不这样做,就会遇到类似您所遇到的问题。

请参阅:Excel and Unicode