[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
今回は 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] の先頭のシートが削除されているのがわかります。
コメント