2013-02-25 64 views
0

我有一個PHPExcel腳本輸出一個Excel文件的問題是,當我從服務器打開它,我可以打開它沒有問題。但是,當我通過瀏覽器中的標題下載它時,它不起作用。PHPExcel無效的文件創建

我在網上搜索了這個問題,但是我沒有找到任何幫助我的東西,我試過用ob_clean();我檢查BOM是否是問題,沒有任何工作。

所以,我希望你們中的一些人有一個想法,這將讓我的腳本工作。

$this->objPHPExcel = $this->objReader->load($this->newFilePath); 
    $objWorksheet = $this->objPHPExcel->getActiveSheet(); 
    $objWriter = PHPExcel_IOFactory::createWriter($this->objPHPExcel, 'Excel2007'); 
    //Adding IO General Overhead 
    foreach($this->sums as $sumkey => $sumval){ 
     foreach($sumval as $keys => $vals){ 
      foreach($vals as $key => $val){ 
       $objWorksheet->setCellValueByColumnAndRow($key, $offset[$sumkey][$keys], $val); 
      } 
     } 
     $objWriter->save($this->newFilePath); 
    } 

    ob_clean(); 

    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 


    // It will be called file.xls 
    header('Content-Disposition: attachment; filename="'.$this->newFilePath.'"'); 

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
+0

一如既往....在一個文本文件打開編輯器,並檢查任何前導/尾隨空白(包括BOM標記),或任何明顯的數據流中的明文錯誤消息....我必須經常重複這個,我真的應該爲它設置一個宏 – 2013-02-25 15:54:31

+0

但是看在你的代碼中,你在哪裏發送文件到瀏覽器?您需要保存到php:// output __after__發送標題;或在發送頭文件後讀取文件($ this-> newFilePath) – 2013-02-25 15:58:57

回答

0

中只看/測試或/例子的代碼樣本01simple下載-xlsx.php,你想要做什麼:

$this->objPHPExcel = $this->objReader->load($this->newFilePath); 
    $objWorksheet = $this->objPHPExcel->getActiveSheet(); 
    $objWriter = PHPExcel_IOFactory::createWriter($this->objPHPExcel, 'Excel2007'); 
    //Adding IO General Overhead 
    foreach($this->sums as $sumkey => $sumval){ 
     foreach($sumval as $keys => $vals){ 
      foreach($vals as $key => $val){ 
       $objWorksheet->setCellValueByColumnAndRow($key, $offset[$sumkey][$keys], $val); 
      } 
     } 
    } 


    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 


    // It will be called file.xls 
    header('Content-Disposition: attachment; filename="'.$this->newFilePath.'"'); 

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 

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