2012-06-27 57 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); 

,现在工作得很好。