Symfony返回一个导出excel的响应

如何在Symfony中返回一个会输出excel文件的响应? 我得到一个错误,我必须返回一个响应,它需要在一个正确的string? 帮帮我!

$excel = new PHPExcel(); $excel->setActiveSheetIndex(0); $excel->getActiveSheet() ->setCellValue('A1', 'hi'); $objWriter = \PHPExcel_IOFactory::createWriter($excel, 'Excel2007'); $objWriter->save(str_replace('.php', '.xlsx', __FILE__)); return $objWriter; 

错误:

 The controller must return a response (Object(PHPExcel_Writer_Excel2007) given). 

控制器必须返回一个Response类的实例,所以执行以下操作:

 ob_start(); $objWriter->save('php://output'); return new Response( ob_get_clean(), // read from output buffer 200, array( 'Content-Type' => 'application/vnd.ms-excel', 'Content-Disposition' => 'attachment; filename="doc.xls"', ) ); 

如果您使用Excel 2007或上设置内容types"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"和文件扩展名为xlsx

在我的情况下,我有一个路由和一个控制器来导出生成的XLS(在我的情况下,button访问路由并返回XLS文件)

另外,我读了一个已经生成和存储的文件,但是即使你没有存储这个文件,它也可以工作,你应该使用$objWriter; 在这一行

 $response = $this->get('phpexcel')->createStreamedResponse($writer); 

此外,我没有使用VisioN指出我应该的Response对象。

那个行动:

 public function exportAction() { $readerObject = PHPExcel_IOFactory::createReader('Excel5'); $phpExcelObject = $readerObject->load('files/downloads/reports/' . $this->getUser()->getName() . '.xls'); $writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel5'); $response = $this->get('phpexcel')->createStreamedResponse($writer); $response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8'); $response->headers->set('Content-Disposition', 'attachment;filename=' . $this->getUser()->getName() . '.xls'); $response->headers->set('Pragma', 'public'); $response->headers->set('Cache-Control', 'maxage=1'); return $response; } 

请注意, 'Excel5'用于XLS文件,如果您需要XLSX文件,则应将其replace为'Excel2007'