导出CSV for Excel

Ale*_*lex 3 php excel

我正在使用编写PHP中的CSV文件fputcsv($file, $data)。所有这些都可以,但是我不能只在Excel中打开它,而必须导入它并指定编码以及要使用的定界符(在向导中)。我已经看到了其他网站的出口,这些出口仅通过单击就可以正确打开,现在想知道我应该对我的文件进行哪些操作以实现此目的。

我尝试使用此库:http : //code.google.com/p/parsecsv-for-php/ 但我什至无法运行它,并且不确定它是否真的可以帮到我...

小智 7

这就是我从 PHP 制作 Excel 可读 CSV 文件的方法:

  • 添加 BOM 以修复 Excel 中的 UTF-8
  • 将分号 (;) 设置为分隔符
  • 设置正确的标题 ("Content-Type: text/csv; charset=utf-8")

举个例子 :

$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。


Mar*_*ryl 5

尽管 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。不舒服但是可以用...