ここでは、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');