要用PHP导出Excel当然要用到著名PHPExcel:
https://github.com/PHPOffice/PHPExcel
但是在Silex的Controller里导出Excel的却找了很久也没有找到相应的攻略。(哭
于是自己一步步的把phpexcel作为一个plugin导入Silex中。这期间遇到不少ClassNotFound的问题,但是每次都靠暴力的
import 来解决,PHPExcel的源码应该多了很多import。哈哈。不管了,至少PHPExcel不报错了。
接下来是Response返回用户文件下载。看了很多phpExcel的应用都是在本地直接生成而不是提供给用户的,
而excel和cvs不同的是excel是二进制流,不能说直接设置下Content-type就可以输出文件。
文件的关键来了:
return new Response(ob_get_clean(),200,array(
"Content-Type"=>"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"Cache-Control"=>"max-age=0"
));
ob_get_clean 的意思是从输出的buffer中读取内容。这样我们就搞定了全部。
参考链接:
https://github.com/Jaza/ExcelServiceProvider
这个链接我想说比较坑,本来想参考这个的,但是里面的内容根本就不全,不过原理就是一个流的处理。