[ PHPExcel ] シートの追加・削除・非表示・コピー

Pocket

ここでは、PHPExcel を使った基本的なシート操作のサンプルコードを記載しています。

スポンサーリンク

  • シートの新規作成
  • シートの削除
  • シート名の設定
  • シートの非表示
  • シートのコピー

の操作を行うサンプルになります。詳細はコメントを参照ください。

シートの新規作成・削除・名前変更・非表示
include_once 'PHPExcel.php';
include_once 'PHPExcel/IOFactory.php';

// PHPExcelオブジェクトを生成する
// この時点で「WorkSheet」というシート名でシートが作成されている
$excel = new PHPExcel();
$sheet = $excel->getActiveSheet();

// シートを追加する
$newSheet1 = $excel->createSheet(); // シート名:Worksheet 1
$newSheet2 = $excel->createSheet(); // シート名:Worksheet 2
$newSheet3 = $excel->createSheet(); // シート名:Worksheet 3

$newSheet3->setTitle('ワークシート3'); // シート名を変更
        
// WorkSheet 2 のインデックスを取得する
$delIndex = $excel->getIndex($newSheet2);
// シートを削除する(インデックスでのみ削除可能)
$excel->removeSheetByIndex($delIndex);

// Worksheet 1 を非表示にする
$newSheet1->setSheetState(PHPExcel_Worksheet::SHEETSTATE_HIDDEN);
// 再表示するに場合は、PHPExcel_Worksheet::SHEETSTATE_VISIBLE を設定する

// ワークシート3 を非表示にする
$newSheet3->setSheetState(PHPExcel_Worksheet::SHEETSTATE_VERYHIDDEN);

/*
 * SHEETSTATE_VERYHIDDEN は VBA では以下のコードに相当し、
 * ユーザーが UI からシートの再表示を行っても表示されることはない。
 *
 * [相当する VBA コード]
 *      Worksheets("ワークシート3").Visible = xlVeryHidden
 *
 * SHEETSTATE_HIDDEN の場合は、ユーザーによる再表示が可能となる。
 *
 */

// Excel 97-2003 形式で作成し、ブラウザに出力する
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="excel97-2003.xls"');
header('Cache-Control: max-age=0');

$writer = PHPExcel_IOFactory::createWriter($excel, "Excel5");
$writer->save('php://output');
シートのコピー

PHPExcel でシートをコピーするサンプルです。注意点としては必ずシート名を重複なく設定する必要があることです。 Excel 2000 での確認結果では、シート名を変更しなかった場合に Excel ファイルの作成はおよびダウンロード後のファイルのオープンまではできますが Excel の終了時や保存時に落ちてしまいます。

古い情報ですいません。

<?php 
include_once 'PHPExcel.php'; 
include_once 'PHPExcel/IOFactory.php'; 

// テンプレートファイルのパス 
$template_path = 'path/to/copysheet.xls'; 
// テンプレートファイルをロード 
$excel = PHPExcel_IOFactory::load($template_path); 

// 先頭のシートを最後尾にコピーする  
$firstSheet = $excel->getSheet(0);
$copied     = $firstSheet->copy();
// (重要!!)シート名を変更する
$copied->setTitle("copy1");

// 第2パラメータが null(省略時含む)の場合は最後尾に追加される
$excel->addSheet($copied, null);

// 指定したシートを先頭にコピーする
$sheet2     = $excel->getSheetByName('sheet2');
$copied2    = $sheet2->copy();

$copied2->setTitle("copy2");
// 先頭にシートを追加
$excel->addSheet($copied2, 0);

// Excel 97-2003 形式で作成し、ブラウザに出力する
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="excel97-2003.xls"');
header('Cache-Control: max-age=0');

$writer = PHPExcel_IOFactory::createWriter($excel, "Excel5");
$writer->save('php://output');

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *