我正在创建一个使用Zend上的phpexcel的Excel报告,其中包含UTF-8编码数据。当我下载并试图在Excel中打开它时,它在本地环境上工作,但是我会遇到以下错误:实时SEVER/生产中的"错误文件格式"。任何帮助/参考都将不胜感激。
这是我用于下载XLS文件的代码:
public function getCsv($data, $filename = false)
{
/**
* generate a file name using unixTimeStamp
* @var string $tmpfname
*/
if ($filename)
{
$tmpfile = "/tmp/".$filename. "-". date('Y-m-d_H:i:s') . ".csv";
$name = str_replace(' ','',$filename)."-".date('Y-m-d_H:i:s') . ".xls";
}
else
{
$tmpfile = "/tmp/report". "_". date('Y-m-d_H:i:s') . ".csv";
$name = "report-".date('Y-m-d_H:i:s') . ".xls";
}
/**
* open Temporary file name in write mode
* @var object $fp
*/
$fp = fopen($tmpfile, "w");
/**
* foreach datas write to csv
*/
foreach ($data as $fields)
fputcsv($fp, $fields, ',', '"');
/**
* close file
*/
fclose($fp);
try
{
$objReader = PHPExcel_IOFactory::createReader('CSV');
$objPHPExcel = $objReader->load($tmpfile);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//set Header Content Type as application/csv
header("Content-Type: application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: attachment; filename=$name");
$objWriter->save('php://output');
}
catch (Exception $e)
{
echo $e->getMessage();
}
exit;
}
保存之前必须使用此行:
ob_end_clean();