忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

PHP PHPExcel エクセルのワークシートの処理について


今回は 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');



■新規 ワークシート の追加処理

新規の ワークシート をブックに追加する場合には createSheetaddSheet のメソッドを使います。
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] の先頭のシートが削除されているのがわかります。














PR

コメント

コメントを書く