PHP Excel множественный экспорт в несколько листов || Неустранимая ошибка: необработанное исключение ‘PHPExcel_Exception’

Я использую PHP Excel, для экспорта данных в 2 листа. Каждый лист должен иметь различную структуру и отличаться. Здесь у меня есть код, который я пытаюсь использовать для создания 2 листов с разными именами, но одинаковыми данными и структурой. Вот код, который я использую:

 <?php
include '...config.php';

/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/London');

if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Browser');

/** Include PHPExcel */
require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// FIRST SHEET BEGIN
// Rename worksheet
$objPHPExcel->getActiveSheet(0)->setTitle('FIRST SHEET');

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
//$objPHPExcel->setActiveSheetIndex();
// Set document properties
$objPHPExcel->getProperties()->setCreator("test.de")
->setLastModifiedBy("test.de")
->setTitle("Study XLS generated from test.de")
->setSubject("Study details")
->setDescription("This file is automatically generated from test.de")
->setKeywords("Office 2007 test.de")
->setCategory("Studies from test.de");

$query = "SELECT * FROM admin_users  ";
$result = mysql_query($query);// Loop through the result set
$rowNumber = 2;

while ($row = mysql_fetch_row($result)) {

$col = 'A'; //start from column
$ime = $row[3]; //this is data from mysql
$jmbg = $row[4]; //this is data from mysql

$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Username')
->setCellValue('B1', 'Pass');
$rows = array($ime,$jmbg);
foreach($rows as $cell) {
$objPHPExcel->getActiveSheet(0)->setCellValue($col.$rowNumber,$cell);

$col++;
}
$rowNumber++;

}

//FIRST SHEET ENDS

// SECOND SHEET BEGIN
// Rename worksheet
$objPHPExcel->getActiveSheet(1)->setTitle('SECOND SHEET');$query1 = "SELECT * FROM admin_users  ";
$result1 = mysql_query($query1);// Loop through the result set
$rowNumber1 = 2;

while ($row1 = mysql_fetch_row($result1)) {

$col1 = 'A'; //start from column
$ime1 = $row[3]; //this is data from mysql
$jmbg1 = $row[4]; //this is data from mysql
//$grad = 'anything else'; //example my excel formulas
$objPHPExcel->setActiveSheetIndex(1)
->setCellValue('A1', 'Username')
->setCellValue('B1', 'Pass');
$rows1 = array($ime1,$jmbg1);
foreach($rows1 as $cell1) {
$objPHPExcel->getActiveSheet(1)->setCellValue($col1.$rowNumber1,$cell1);

$col1++;
}
$rowNumber1++;

}

//SECOND SHEET ENDS// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="studies.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');

// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 2015 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;

Что я получаю это:

Fatal error: Uncaught exception 'PHPExcel_Exception' with message 'You tried to set a sheet active by the out of bounds index: 1. The actual number of sheets is 1.' in /var/www/test/Classes/PHPExcel.php:688 Stack trace: #0 /var/www/test/Examples/01simple-download-xls.php(86): PHPExcel->setActiveSheetIndex(1) #1 {main} thrown in /var/www/test/Classes/PHPExcel.php on line 688

Когда я запускаю только первый лист, он работает нормально. Как я могу это исправить?
Спасибо!

1

Решение

Создание нового объекта PHPExcel с помощью

$objPHPExcel = new PHPExcel();

создает только объект PHPExcel с не замужем рабочий лист (лист № 0).

Впоследствии вы говорите использовать второй лист (лист № 1), когда его еще нет:

$objPHPExcel->getActiveSheet(1)->setTitle('SECOND SHEET');

Перед этим необходимо создать второй лист в объекте PHPExcel:

$objPHPExcel->createSheet();
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]