我正在使用编写PHP中的CSV文件fputcsv($file, $data)
。所有这些都可以,但是我不能只在Excel中打开它,而必须导入它并指定编码以及要使用的定界符(在向导中)。我已经看到了其他网站的出口,这些出口仅通过单击就可以正确打开,现在想知道我应该对我的文件进行哪些操作以实现此目的。
我尝试使用此库:http : //code.google.com/p/parsecsv-for-php/ 但我什至无法运行它,并且不确定它是否真的可以帮到我...
小智 7
这就是我从 PHP 制作 Excel 可读 CSV 文件的方法:
举个例子 :
$headers = array('Lastname :', 'Firstname :');
$rows = array(
array('Doe', 'John'),
array('Schlüter', 'Rudy'),
array('Alvarez', 'Niño')
);
// Create file and make it writable
$file = fopen('file.csv', 'w');
// Add BOM to fix UTF-8 in Excel
fputs($file, $bom = (chr(0xEF) . chr(0xBB) . chr(0xBF)));
// Headers
// Set ";" as delimiter
fputcsv($file, $headers, ";");
// Rows
// Set ";" as delimiter
foreach ($rows as $row) {
fputcsv($file, $row, ";");
}
// Close file
fclose($file);
// Send file to browser for download
$dest_file = 'file.csv';
$file_size = filesize($dest_file);
header("Content-Type: text/csv; charset=utf-8");
header("Content-disposition: attachment; filename=\"file.csv\"");
header("Content-Length: " . $file_size);
readfile($dest_file);
Run Code Online (Sandbox Code Playgroud)
适用于 Excel 2013。
尽管 CVS 中有“C=逗号”,但 Excel 使用您的语言环境本机分隔符。因此,假设fputcsv
始终使用逗号,如果您的区域设置分隔符是分号,则它不起作用。
当您点击“导出到 Excel CSV”时,Google AdSense 的作用是将其Tab用作分隔符。这有效。
要复制它,请设置第三个参数 ( delimiter
)fputcsv
以覆盖默认逗号。例如Tab使用:fputcsv($handle, $fields, "\t");
将适用于您的 CSV 格式与 .csv 生成的格式进行比较fputcsv
。
考虑在您的问题中包含两者的示例。你可能会得到更好的答案。
小智 5
这真是一团糟。您当然可以使用sep =;。或sep =或sep = \ t或其他使Excel知道CSV中使用的分隔符的方法。只需将此字符串放在CSV内容的开头即可。例如:
fwrite($handle, "sep=,\n");
fputcsv($handle,$yourcsvcontent);
Run Code Online (Sandbox Code Playgroud)
这样可以顺利进行。但是,它不能与BOM结合使用,而BOM需要使Excel知道UTF-8,以防您需要分别支持特殊字符或MB。
最后,要使其防弹,您需要如上所述读出用户的语言环境并相应地设置分隔符。将BOM ("\xEF\xBB\xBF")
放在CSV内容的开头,然后像这样编写CSV:例如:通过检查用户的区域设置检索到的分隔符fputcsv($handle, $fields, $user_locale_seperator);
在哪里$user_locale_seperator
。不舒服但是可以用...
归档时间: |
|
查看次数: |
12335 次 |
最近记录: |