2

phpexcel を使用していくつかのシートを作成していますが、すべて正常に動作していますが、作成したすべてのシートの後に余分な空のシートが作成されており、その理由や停止方法がわかりません。なぜそれが起こっているのか知っていますか?

スプレッドシートを生成するために、次のようにシート インデックスと名前を格納する 2 つの静的配列があります。

//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;
}

xls で生成されたテンプレートにあるこの最終的な空のシートを生成している可能性があることを知っていますか? それは正常な動作ですか、それともコードに見当たらない何かが欠けていますか?

4

1 に答える 1

3

これは正常な動作です。新しい PHPExcel オブジェクトをインスタンス化すると、単一のワークシート (「ワークシート」) で自動的に作成されます。これは、ほとんどのユーザーが必要とする可能性が高いためです。作成しているシートは、一連のワークシートを「下に」押しているインデックス位置を指定しているため、その「前」に挿入されています。

すべて独自のシートを作成しているため、自動作成されたワークシートが必要ない場合は、PHPExcel オブジェクトの removeSheetByIndex() メソッドを使用します。

于 2012-08-29T15:26:30.027 に答える