SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【PhpSpreadsheet】テンプレートからシートをコピーして増やす

問題

PhpSpreadsheetで、既存のExcelをテンプレートにして、ひな形のシートをコピーして新しいExcelを作りたいです。

新しいワークシートを作って、元のワークシートからコピーして addSheet() するとどうもうまくいかないのですが。

答え

PhpSpreadsheet(PHPExcel)は、既存のExcelを読み込んで追記したり、シートをコピーしたりできるのだが、ワークシートをまたいでのコピーはしないほうが無難。

ワークシートが異なると、テーマやスタイルが異なるので、結構大変なのじゃとマニュアルに書いてあった。

You can also copy worksheets from one workbook to another, though this is more complex as PhpSpreadsheet also has to replicate the styling between the two workbooks. The addExternalSheet() method is provided for this purpose.

https://phpspreadsheet.readthedocs.io/en/latest/topics/worksheets/#copying-worksheets

いわれてみれば確かに。

さらに、その用途のために addExternalSheet() というメソッドがあるよ とのこと。

あるシートをひな型にしてシートを増やしていくような処理をするときは、同じワークシート内でコピーして、最後にテンプレートにしたシートを消すような流れにするのが簡単そう。

同じワークシート内のコピーは、sheet を clone して、シート名を変えて、addSheet() でOK。

$clonedWorksheet = clone $spreadsheet->getSheetByName('Worksheet 1');
$clonedWorksheet->setTitle('Copy of Worksheet 1');
$spreadsheet->addSheet($clonedWorksheet);

シートの削除は removeSheetByIndex() などでできる。

関連するメモ

コメント