我正在以编程方式将数据(使用PHP5.2)导出到.csv测试文件中。
示例数据:Numéro 1
(注意重音e)。数据为utf-8
(无前置物料清单)。
当我在MS Excel中打开此文件时,它显示为Numéro 1
。
我可以在正确显示它的文本编辑器(UltraEdit)中打开它。UE报告角色是decimal 233
。
我如何导出.csv文件中的文本数据,以便 MS 将正确地呈现它,最好不强制使用导入向导或非默认向导设置?
发布于 2008-11-24 17:11:19
前缀BOM (\uFEFF)适用于我(Excel 2007),因为Excel将该文件识别为UTF-8。否则,保存它并使用导入向导是可行的,但不太理想。
发布于 2009-10-30 16:50:24
以下是我在将Microsoft Excel发送给用户时在项目中使用的PHP代码:
/**
* Export an array as downladable Excel CSV
* @param array $header
* @param array $data
* @param string $filename
*/
function toCSV($header, $data, $filename) {
$sep = "\t";
$eol = "\n";
$csv = count($header) ? '"'. implode('"'.$sep.'"', $header).'"'.$eol : '';
foreach($data as $line) {
$csv .= '"'. implode('"'.$sep.'"', $line).'"'.$eol;
}
$encoded_csv = mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8');
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'.$filename.'.csv"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: '. strlen($encoded_csv));
echo chr(255) . chr(254) . $encoded_csv;
exit;
}
更新:文件名改进并修复了正确的长度计算。感谢TRiG和@ivanhoe011
发布于 2013-08-22 16:26:09
Excel版本(2003 + 2007)和文件类型的所有组合的答案
这里的大多数其他答案只涉及其Excel版本,不一定会对您有所帮助,因为它们的答案可能不适用于您的Excel版本。
例如,添加BOM表字符会导致自动识别列分隔符时出现问题,但并不是每个Excel版本都会出现问题。
有3个变量决定它是否适用于大多数Excel版本:
SAP的某个坚忍的人尝试了每种组合,并报告了结果。最终结果是什么?使用带有物料清单和制表符的UTF16le作为分隔符,使其在大多数Excel版本中都能工作。
你不相信我?我也不会,但请在这里阅读并流泪:http://wiki.sdn.sap.com/wiki/display/ABAP/CSV+tests+of+encoding+and+column+separator
https://stackoverflow.com/questions/155097
复制相似问题