PHP Excel在多个工作表中多次导出| |致命错误:未捕获异常';PHPExcel#u异常';

PHP Excel在多个工作表中多次导出| |致命错误:未捕获异常';PHPExcel#u异常';,php,excel,google-sheets,export,Php,Excel,Google Sheets,Export,我使用的是PHP Excel,用于导出两张表中的数据。每个工作表都应该有不同的结构和功能。这里我有代码,我尝试使用它生成两张不同名称但数据和结构相同的工作表。以下是我使用的代码: <?php include '...config.php'; /** Error reporting */ error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', T

我使用的是PHP Excel,用于导出两张表中的数据。每个工作表都应该有不同的结构和功能。这里我有代码,我尝试使用它生成两张不同名称但数据和结构相同的工作表。以下是我使用的代码:

 <?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;
当我只运行第一张工作表时,它工作正常。我怎样才能解决这个问题?
谢谢

使用

$objPHPExcel = new PHPExcel();
仅使用单个工作表(工作表#0)创建PHPExcel对象

您随后告诉它在还不存在的情况下使用第二张图纸(图纸#1):

$objPHPExcel->getActiveSheet(1)->setTitle('SECOND SHEET');
在此之前,您需要在PHPExcel对象中创建第二个工作表:

$objPHPExcel->createSheet();

它以某种方式工作,但我现在得到的是一个xls文件,其中包含第一个名为“SECOND sheet”的工作表,其中包含我需要的数据,第二个工作表名为“sheet”,只包含列名“Username”和“Password”。我所期望的是第一张名为“first sheet”的表格,里面有一些数据,第二张名为“second sheet”,里面有相同的数据。非常感谢。这是因为您不了解“活动工作表”:一次只能有一个活动工作表
->getActiveSheet(1)
不接受参数,它只返回当前定义为活动工作表的工作表,
->setActiveSheetIndex(1)
用于设置当前活动工作表非常感谢@Mark Baker!我修好了!我使用$objPHPExcel->getSheet(0)->setTitle('First Sheet');而不是$objPHPExcel->getActiveSheet(1)->setTitle('SECOND SHEET');
$objPHPExcel->createSheet();