2013-05-14 2 views
2

Zend2에서 PHPExcel을 사용하려고합니다. 실제로는 작동하지만 의도 한대로 작동하지 않습니다 (파일에 쓸 수는 있지만 저장하지 않고 다운로드 할 수는 없습니다). 몇 가지 예를 찾아 보겠습니다. 다음과 같이하면됩니다.Zend2 컨트롤러의 PHPExcel

$objPHPExcel = .... 

header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="01simple.xls"'); 
header('Cache-Control: max-age=0'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('php://output'); 

파일을 다운로드 할 수있었습니다. Zend2 컨트롤러에서 비슷한 것을 어떻게 할 수 있습니까? 나는 지금까지 시도 :

그러나 내 페이지에 "에코 같은"출력을 제공합니다. 내 두 번째 시도는 다음과 같습니다.

$response->setContent($objWriter->save('php://output')); 

결과는 동일합니다.

@Aydin 하산은 주석으로
+0

서버의 실제 파일 대신'php : // output'을 대체 한 다음 파일을 응답 내용으로 설정할 수 있습니까? –

+0

서버를 절약하지 않고 "메모리 있음"시나리오로이를 해결하려고했습니다. 어떤 해결책도 찾지 못한다면 나는 이렇게 할 것입니다. – kamil

+1

어쩌면이 때 가야할 것입니다 : http://stackoverflow.com/a/9480344/1053820 –

답변

2

, 내가 함께 시도했다 :

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
ob_start(); 
$objWriter->save('php://output'); 
$excelOutput = ob_get_clean(); 

그리고 단순히 응답 내용에 $excelOutput 통과, 그것은 단순히 좋은 작품!

$response->setContent($excelOutput); 
0

그래서 당신은, 당신의 컨트롤러 액션에서이 같은 보관할 수 있습니다 : 위의 방법으로 그것을 할

public function testPHPExcelAction() { 
    // I recommend constructor injection for all needed dependencies ;-) 
    $this->phpExcelService = $this->serviceLocator->get('mvlabs.phpexcel.service'); 

    $objPHPExcel = $this->phpExcelService->createPHPExcelObject(); 
    $objPHPExcel->getProperties()->setCreator("Diego Drigani") 
     ->setLastModifiedBy("Diego Drigani") 
     ->setTitle("MvlabsPHPExcel Test Document") 
     ->setSubject("MvlabsPHPExcel Test Document") 
     ->setDescription("Test document for MvlabsPHPExcel, generated using Zend Framework 2 and PHPExcel.") 
     ->setKeywords("office PHPExcel php zf2 mvlabs") 
     ->setCategory("Test result file"); 
    $objPHPExcel->setActiveSheetIndex(0) 
     ->setCellValue('A1', 'Hello') 
     ->setCellValue('B2', 'world!') 
     ->setCellValue('C1', 'Hello') 
     ->setCellValue('D2', 'world!'); 
    $objPHPExcel->setActiveSheetIndex(0) 
     ->setCellValue('A4', 'Miscellaneous glyphs') 
     ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç'); 

    $objPHPExcel->getActiveSheet()->setCellValue('A8',"Hello\nWorld"); 
    $objPHPExcel->getActiveSheet()->getRowDimension(8)->setRowHeight(-1); 
    $objPHPExcel->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true); 
    $objPHPExcel->getActiveSheet()->setTitle('Mvlabs'); 
    $objPHPExcel->setActiveSheetIndex(0); 

    $objWriter = $this->phpExcelService->createWriter($objPHPExcel, 'Excel2007'); 

    $response = $this->phpExcelService->createHttpResponse($objWriter, 200, [ 
     'Pragma' => 'public', 
     'Cache-control' => 'must-revalidate, post-check=0, pre-check=0', 
     'Cache-control' => 'private', 
     'Expires' => '0000-00-00', 
     'Content-Type' => 'application/vnd.ms-excel; charset=utf-8', 
     'Content-Disposition' => 'attachment; filename=' . 'myTest.xls', 
     ]); 

    return $response; 

}  

을, 당신은 당신에게 할 수있는 가능성을 제공하는 MvlabsPHPExcel 모듈을 사용할 필요가 PHPOffice/PHPExcel 라이브러리를 ZF2 응용 프로그램에 쉽게 사용하십시오.