2012-06-27 3 views
1

Я пытаюсь использовать phpExell в своем приложении Zend для распечатки файла 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); 

и теперь он работает отлично.

Смежные вопросы