phpExcel生成额外的工作表

时间:2012-06-27 21:54:42

标签: php zend-framework phpexcel

我正在尝试在我的Zend应用程序中使用phpExell打印出包含多个工作表的Excel文件。

在我的控制器类中,我有以下全局变量......

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?

我点击是。然后得到两个“重命名的无效工作表名称。”修复错误消息。该文件包含每次迭代的工作表,但对于默认工作表之后的每个人,它会添加一个额外的工作表。为什么要创建额外的电子表格?

2 个答案:

答案 0 :(得分:0)

原来你不需要调用addSheet。 createSheet()会自动为您执行此操作。  我删除了

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

现在工作正常。

答案 1 :(得分: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)