2014-05-24 53 views
0

我想从我的mysql数据库中导出一些数据到excel文件。我正在使用PHPExcel库来做到这一点。 我有这样的代码:使用PHPExcel将数据从mysql导出到xls

include 'PHPExcel/PHPExcel.php'; 
include 'config.php' //here I connect to db 
$objPHPExcel = new PHPExcel(); 
$objPHPExcel->setActiveSheetIndex(0); 
$sheet = $objPHPExcel->getActiveSheet(); 
$r = mysql_fetch_array(mysql_query("SELECT * FROM Users WHERE ID=6")); 
.. 
Some cells formatting here 
.. 
$sheet->SetCellValue('A1', "NUMER ZLECENIA: ".$r["ID"]); 
.. 
Rest of formatting 
.. 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
header('Content-Type: application/vnd.ms-excel; charset=UTF-8'); 
header('Content-Disposition: attachment;filename="01simple.xls"'); 
header('Cache-Control: max-age=0'); 
$objWriter->save('php://output'); 
exit; 

现在,当我运行,文件下载成功,但是当我试图打开它,我看到错误:“文件是在不同的文件格式比它的扩展名表示“。但是,当我删除。$ r [”ID“]并将其替换为一个数字时,该文件就打开了。

可能是由于错误的编码引起的,在db中我编码的是UTF-8,但ID只是数字。我不知道为什么它不起作用。

回答

0

$r["ID"]确实存在吗?是$r["id"]

在文本编辑器中打开文件并查找明显的错误消息......但我认为您的列名可能是小写。

请注意,charset=UTF-8是无意义的,它适用于发送到浏览器的内容;该文件没有在浏览器中打开,但在MS Excel,这是不知道发送到Web浏览器

0

字符集的我尝试和发现一些工作:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
ob_end_clean(); 
header('Content-Type: application/vnd.ms-excel; charset=UTF-8'); 
header('Content-Disposition: attachment;filename="01simple.xls"'); 
header('Cache-Control: max-age=0'); 
$objWriter->save('php://output'); 
exit; 
+0

如果ob_end_clean()的工作原理,那么你的脚本产生的额外输出被发送到php://输出(警告消息就是这种输出的一个很好的例子) - 但ob_end_clean()只是一个工作,真正的解决方案是识别输出在文件中使用文本编辑器是一种很好的方法)并删除该输出 –