雑多なブログ

音楽や語学、プログラム関連の話題について書いています

php: phpspreadsheetでシートのクローンができない。

テンプレートシートをもとに、複数のシートを生成する処理を実装しようとしましたが実装できませんでした・・・・
詳細は省略しますが、おおまかな処理の流れは次の通りです。

  • Excelブックのオブジェクトを生成する
  • テンプレートのExcelを読み込む
  • ループ処理
    • テンプレートシートをクローンする
    • クローンしたシートをもとにシートを生成する
    • Excelブックオブジェクトにシートを追加する
  • Excelブックオブジェクトの内容をlファイルに書き出す

テンプレートシートのオブジェクトをクローンしたい理由としては、ファイルの再読み込みを避けて、処理のパフォーマンスを向上させたいというものがありました。

ですが、実際にやってみるとこれが「sheet not found 」といったような内容のエラーが出てしまい、どうやってもオブジェクトの複製をする事ができませんでした。現時点の最新である1.14.1でも試してみましたが、問題は解消しませんでした。
どうも、セルのスタイルや数式があるとうまく処理できないようです。githubやstackoverflowを調べてもみましたが、問題を解決する情報にはたどり着きませんでした。

パフォーマンスを気にしなければ、シート生成ごとにテンプレートExcelを読み込み直す事で実装も可能でしたが、何十個もシートを生成する必要ある場合には、ファイルの読み直しは現実的ではありません。
私の実装しているケースでは10倍以上処理時間に差が出たので、テンプレートを毎回読み直すのはさすがに無理があります。

と言う事で、解決方法が見つからなかったので、そもそもテンプレート読むのをやめてphp上で最初から動的にシートを生成する形に方向転換しました。

最初からそうすれば良かった(^~^;