今回は PHPExcel で行う 「ワークシートの扱い方」 について説明したいと思います。 
■PHPExcel オブジェクトの生成と ワークシート の取得
PHPExcel オブジェクトを生成を行うと1個の ワークシート ができているので、その ワークシート・オブジェクト を取得し、 そのオブジェクトの各種メソッドでセルなどに処理を行います。 
getActiveSheet メソッドは現在のアクティブなワークシート返しますが PHPExcel オブジェクトを生成直後は1個しかないシートがアクティブとして返されます。 
以下のページと内容は同じですので、参照して下さい。 
⇒PHP エクセルファイル出力の方法について(PHPExcel) 
<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// シート設定
$objSheet = $objBook->getActiveSheet();
// [A1]セルに文字列設定
$objSheet->setCellValue('A1', 'ABCDEFG');
// Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test.xlsx');
exit();
?>
getSheet メソッドは引数にワークシートの Index 指定を指定しますが、指定が無ければ先頭の Index のシートが返されます。 ワークシートの Index ではなく名前で指定するには getSheetByName メソッドを使用します。
// シート設定:ワークシートの Index 指定
$objSheet = $objBook->getSheet(0);
// シート設定:ワークシートの Index 指定無し(Index = 0 と同様)
$objSheet = $objBook->getSheet();
// シート設定:ワークシートの名前指定
$objSheet = $objBook->getSheetByName('Worksheet');
■新規 ワークシート の追加処理
新規の ワークシート をブックに追加する場合には createSheet と addSheet のメソッドを使います。 
createSheet メソッドは引数の無い場合はシートの最後に追加されます。引数はシートの Index で指定された場合はその位置に挿入されます。 
addSheet メソッドは指定されたシートオブジェクトを Index で指定された場合はその位置に挿入されます。
<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// (1)シート追加
$objBook->createSheet();
// (2)シート追加:シート位置 Index 指定(Index = 0 :ブックの先頭)
$objBook->createSheet(0);
// 新規ワークシートを生成
$objSheetMyData = new PHPExcel_Worksheet($objBook, 'MyData');
// (3)[MyData]ワークシートをブックの先頭に追加
$objBook->addSheet($objSheetMyData, 0);
// Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test2.xlsx');
exit();
?>
出力されたエクセルファイルを見てみると以下の様になります。
このワークブックには必ず4個のワークシートが生成されています。 
[Worksheet] は最初のPHPExcelオブジェクト作成後は必ず存在します。その後順番に以下の様になります。 
(1) [Worksheet 1]はシートの最後に追加されます。 
(2) [Worksheet 2]は先頭のシート([Worksheet])の前に追加されます。 
(3) [MyData]は先頭のシート([Worksheet 2])の前に追加されます。 
■ワークシート のコピー処理
ワークブックの中のコピーしたいワークシートのクローンを生成し、そのオブジェクトをワークブックに追加することでコピー処理となります。 
ワークブックへの追加は addSheet メソッドを使用します。
<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// シート設定
$objSheet = $objBook->getActiveSheet();
// [A1]セルに文字列設定
$objSheet->setCellValue('A1', 'ABCDEFG');
// [A2]セルに数値設定
$objSheet->setCellValue('A2', 123.56);
// 0 番目のワークシート・オブジェクトのクローンを作成
$objCloneSheet = clone $objBook->getSheet(0);
// クローンワークシートのタイトル設定
$objCloneSheet->setTitle('Copy Worksheet 1');
// ワークブックへの追加
$objBook->addSheet($objCloneSheet);
// Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test3.xlsx');
?>
出力されたエクセルファイルを見てみると以下の様になります。
他のワークブックからのコピーを行う場合は、そのワークブックの該当するワークシートのクローンを生成し addExternalSheet メソッドで行います。
<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// [test3.xlsx] ファイルをロードしPHPExcelオブジェクト作成
$objBook = PHPExcel_IOFactory::load('./test3.xlsx');
// PHPExcelオブジェクト作成
$objBookNew = new PHPExcel();
// シート設定
$objSheetNew = $objBookNew->getActiveSheet();
// [A1]セルに文字列設定
$objSheetNew->setCellValue('A1', 'abcdefghijklmn');
// [test3.xlsx]:[Copy Worksheet 1] シートのクローンを作成
$objCloneSheet = clone $objBook->getSheetByName('Copy Worksheet 1');
// ワークブックへの追加
$objBookNew->addExternalSheet($objCloneSheet);
// 追加後のブックでのシート取得
$objSheet = $objBookNew->getSheetByName('Copy Worksheet 1');
// クローンワークシートのタイトル再設定
$objSheet->setTitle('New Worksheet 1');
// Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBookNew, "Excel2007");
$objWriter->save('test3-1.xlsx');
exit();
?>
出力されたエクセルファイル[test3-1.xlsx]を見てみると以下の様になります。
■ワークシート の削除処理
ワークブックからワークシートの削除を行うには、削除対象のワークシートの Index 番号を取得し removeSheetByIndex メソッドで行います。
<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// [test3-1.xlsx] ファイルをロードしPHPExcelオブジェクト作成
$objBook = PHPExcel_IOFactory::load('./test3-1.xlsx');
// シート名 "Worksheet" シート設定
$objSheet = $objBook->getSheetByName('Worksheet');
// シートオブジェクトから Index 取得
$intIndex = $objBook->getIndex($objSheet);
// Index によるシートオブジェクト削除
$objBook->removeSheetByIndex($intIndex);
// Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test3-2.xlsx');
exit();
?>
出力されたエクセルファイル[test3-2.xlsx]を見てみると以下の様になります。[test3-1.xlsx] の先頭のシートが削除されているのがわかります。
 
  
コメント