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