2012-06-27 93 views
1

我想在我的Zend應用程序中使用phpExell打印出一個Excel文件與多個工作表。phpExcell生成額外的工作表

在我的控制器類,我有以下的全局變量...

public $objPHPExcel; 

這是在像這樣的動作函數初始化...

$this->objPHPExcel = new PHPExcel(); 

的動作,然後通過一些數據庫迭代電話,建立一份報告。在每次迭代中,它會調用以下函數,以整數形式傳遞工作表索引,打印輸出數據以及包含工作表名稱的字符串。

protected function buildWorksheet($index, $report, $repName) { 
    //build new worksheet after default 
    if($index > 0) { 
     $objWorksheet = $this->objPHPExcel->createSheet(); 
     $this->objPHPExcel->addSheet($objWorksheet); 
    } else { 
     $this->objPHPExcel->setActiveSheetIndex($index); 
     $objWorksheet = $this->objPHPExcel->getActiveSheet(); 
    } 
    //write the worksheet 
    $col = 0; 
    $row = 1; 
    foreach($report as $entry) { 
     foreach($entry as $key => $value) { 
      $objWorksheet->setCellValueByColumnAndRow($col, $row, $value); 
      $col++; 
     } 
     $row++; 
     $col = 0; 

    } 

    $objWorksheet->setTitle($repName); 
} 

然後,回到我打印出來的Excel文件中的動作......

$objWriter = PHPExcel_IOFactory::createWriter($this->objPHPExcel, 'Excel5'); 
    ob_start(); 
    if (headers_sent()) die("**Error: headers sent"); 
    header("Pragma: public"); 
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Content-Type: application/force-download"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Type: application/download"); 
    header('Content-Disposition: attachment;filename="simple.xls"'); 
    header("Content-Transfer-Encoding: binary"); 
    ob_clean(); 
    $objWriter->save('php://output'); 
    exit(); 

當我在Excel中打開文件時,我得到以下信息...

Excel found unreadable content in 'simple.xls'. Do you want to recover the contents of this workbook? 

我點擊是。然後得到兩個「重命名無效的工作表名稱」。修復錯誤信息文件包含每個迭代的工作表,但是對於默認工作表之後的每個工作表,它會添加一個額外的工作表爲什麼會創建額外的電子表格?

回答

0
/** 
* Create sheet __and add it to this workbook__ 
* 
* @param int|null $iSheetIndex Index where sheet should go (0,1,..., or null for last) 
* @return PHPExcel_Worksheet 
* @throws Exception 
*/ 
public function createSheet($iSheetIndex = null) 
0

原來你不需要調用addSheet 。createSheet()進行自動爲您完成此。 我刪除

$this->objPHPExcel->addSheet($objWorksheet); 

,現在工作得很好。