PHPExcel在最后添加一个空的电子表格

PHPExcel在最后添加一个空的电子表格,php,phpexcel,Php,Phpexcel,我正在使用phpexcel创建一些工作表,一切正常,但是在我创建了所有工作表之后,又创建了一个额外的空工作表,我不知道为什么会这样,也不知道如何停止它。你知道为什么会这样吗 要生成电子表格,我有两个静态数组存储工作表索引和名称,如下所示: //List of Enter Data sheets. const IRRIGATION_SHEET_INDEX = 0; const CANOPY_SHEET_INDEX = 1; const CLUSTER_SHEET_INDEX = 2; const

我正在使用phpexcel创建一些工作表,一切正常,但是在我创建了所有工作表之后,又创建了一个额外的空工作表,我不知道为什么会这样,也不知道如何停止它。你知道为什么会这样吗

要生成电子表格,我有两个静态数组存储工作表索引和名称,如下所示:

//List of Enter Data sheets.
const IRRIGATION_SHEET_INDEX = 0;
const CANOPY_SHEET_INDEX = 1;
const CLUSTER_SHEET_INDEX = 2;
const OBSERVATIONS_SHEET_INDEX = 3;
const WATERPOTENTIAL_SHEET_INDEX = 4;
const FRUITMATURITY_SHEET_INDEX = 5;

//list of hidden sheets created only to fill data validation lists in the bulk_upload_sheet
const BLOCKS_LIST_SHEET_INDEX = 6;
const RANCHES_LIST_SHEET_INDEX = 7;
const SUB_BLOCKS_LIST_SHEET_INDEX = 8;

/**
 * This is a static array to store the indexes and titles of each usable sheet (by usable sheet, it means that these are the sheets the user can see)
 * @var array
 */
public static $usableSheetTitles = array(
        //SELF::BULK_UPLOAD_SHEET_INDEX => 'BulkUploadTemplate',
        SELF::IRRIGATION_SHEET_INDEX => 'Irrigation',
        SELF::CANOPY_SHEET_INDEX => 'Canopy',
        SELF::CLUSTER_SHEET_INDEX => 'Cluster',
        SELF::OBSERVATIONS_SHEET_INDEX => 'Observations',
        SELF::WATERPOTENTIAL_SHEET_INDEX => 'WaterPotential',
        SELF::FRUITMATURITY_SHEET_INDEX => 'FruitMaturity'
);

public static $auxiliarSheets = array (
        SELF::BLOCKS_LIST_SHEET_INDEX => 'BlocksList',
        SELF::RANCHES_LIST_SHEET_INDEX => 'RanchesList',
        SELF::SUB_BLOCKS_LIST_SHEET_INDEX => 'SubBlocksList'
);
然后调用方法
createSheets()
,该方法读取这些数组并生成所需的图纸:

public static function createSheets($objPHPExcel, $ranches, $subBlocks) {
    count($ranches) <= 1 ? $hasSeveralRanches = false : $hasSeveralRanches = true;
    count($subBlocks) <= 0 ? $hasSubBlocks = false : $hasSubBlocks = true;
    foreach (self::$usableSheetTitles as $sheetIndex => $sheetTitle) {
        $objPHPExcel->createSheet($sheetIndex);
        $objPHPExcel->setActiveSheetIndex($sheetIndex);
        $objPHPExcel->getActiveSheet()->setTitle($sheetTitle);
        self::insertTitleAndLegend($objPHPExcel, $sheetTitle, $hasSeveralRanches, $hasSubBlocks);
    }
    foreach (self::$auxiliarSheets as $sheetIndex => $sheetTitle) {
        $objPHPExcel->createSheet($sheetIndex);
        $objPHPExcel->setActiveSheetIndex($sheetIndex);
        $objPHPExcel->getActiveSheet()->setTitle($sheetTitle);
    }
    return $objPHPExcel;
}
公共静态函数createSheets($objPHPExcel、$ranches、$subBlocks){
count($ranches)createSheet($sheetIndex);
$objPHPExcel->setActiveSheetIndex($sheetIndex);
$objPHPExcel->getActiveSheet()->setTitle($sheetTitle);
self::insertTitleAndLegend($objPHPExcel、$sheetTitle、$hasSeveralRanches、$hasSubBlocks);
}
foreach(self::$auxiliarSheets as$sheetIndex=>$sheetTitle){
$objPHPExcel->createSheet($sheetIndex);
$objPHPExcel->setActiveSheetIndex($sheetIndex);
$objPHPExcel->getActiveSheet()->setTitle($sheetTitle);
}
返回$objPHPExcel;
}

你知道在我的xls生成的模板中,什么可能会生成这个最终的空表吗?这是一种正常行为还是代码中缺少了一些我没有看到的东西?

这是正常行为。当您实例化一个新的PHPExcel对象时,它会使用一个工作表(“工作表”)自动创建它,因为这是大多数用户可能需要的。您正在创建的工作表将被插入到它的“前面”,因为您正在指定它们的索引位置,这会将它推到一系列工作表的“下方”


如果您不需要自动创建的工作表,因为您正在创建自己的所有工作表,那么请使用PHPExcel对象的removeSheetByIndex()方法。

那么我如何知道此工作表的索引?因为我隐藏了索引为6、7和8的表格…解决了。。它只是应用了u对索引9:D所说的方法,再次感谢,@markbaker在您自己添加任何表之前,它将处于索引0;否则,请使用getSheetNames()返回工作表名称数组,并将适当的索引号作为每个条目的数组键。添加所有工作表后,它将具有最高的索引id,即getSheetCount()-1您的意思是我可以创建所有工作表而不为每个工作表定义索引吗?现在我意识到我可以不用索引来完成这一切,只有SheetName,我可以定义为常量。。。我会把它记在我的待办事项清单上!谢谢