2012-12-02 109 views
1

在項目中,我使用Symfony2的PHPExcel包裝器https://github.com/liuggio/ExcelBundle如何修改使用PHPExcel Excel文件中的Symfony2

與鏈接上面的例子我可以創建新的Excel文件。但是這個文件根本沒有樣式或標記。所以我創建了一個我想輸入一些數據的excel模板。

我知道如何加載一個Excel文件:

$excelObj = $this->get('xls.load_xls2007') 
       ->load($this->get('kernel') 
       ->getRootDir() . '/../web/excel-template.xlsx'); 

//custom modifications on excel file 

現在我需要創建一個響應。但是在ExcelBundle的文檔中沒有關於如何做到這一點的信息。他們只是顯示瞭如何響應爲由代碼創建的Excel文件工作。

我想:

$excelService->setExcelObj($excelObj); 
$response = $excelService->getResponse(); 
//the rest is equal to the code in the doc 

,但它給了我一個空白Excel文檔。

任何想法如何使用加載的excel文件做出響應?

回答

1

您可以通過

// Read the file 
    $objReader = PHPExcel_IOFactory::createReader($fileType); 
    $objPHPExcel = $objReader->load($fileName); 

    // Change the file 
    $objPHPExcel->setActiveSheetIndex(0) 
       ->setCellValue('A1', 'Hello') 
       ->setCellValue('B1', 'World!'); 

    // Write the file 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $fileType); 
    $objWriter->save($fileName); 

,如果你不明白請評論做..

0

我會將文件保存到磁盤並將用戶重定向到個人的磁盤版本。這將允許幾件事情

  • 您的網絡服務器提供文件,而不是PHP,從性能和內存使用的角度來看,這是一件好事。
  • 將您的架構分開一點,以便將來進行更改,例如將Excel文件的創建和加載移動到異步操作。
  • 使用http://wiki.nginx.org/XSendfile的能力(也有一個Apache模塊)。
  • 用戶可以重新下載文件或暫停並恢復下載而不重新創建它。

爲它創建

  • 將用戶重定向到該文件位置
  • 創建一個cron或者其他一些之後做到這一點,你會想

    • 將文件保存到網絡訪問的臨時目錄作業,刪除臨時目錄中的舊文件。

    的臨時文件API(http://us2.php.net/tmpfile)這裏可能是有用的。

  • +0

    我不知道該如何解決我的問題。我只想知道保存和響應xml文件的代碼行 –

    0

    PHPExcelbundle新版本的2 *可以幫助你。

    現在是可能的:

    //read 
    $phpExcelObject = $this->get('phpexcel')->createPHPExcelObject('file.xls'); 
    $phpExcelObject->setActiveSheetIndex(0) 
        ->setCellValue('C6', 'some text') 
        ->setCellValue('D6', 'some text2'); 
    $writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel5'); 
    $writer->save('file.xls'); 
    // or 
    $response = $this->get('phpexcel')->createStreamedResponse($writer);