PhpSpreadsheet で画像オブジェクトが全部ぶっ壊れた話
この記事は Aizu Advent Calendar 2021 の3日目の記事です
なんとなく存在は知ってはいたけど、アドベントカレンダーっていう文化があるみたいですね
これを書いてる段階では3日目が空白になっていたので埋めてみます
どうも ここ2,3年は PHP の仕事をよくやってます、ねLです
さて、IT 業界で切っても切れない有名なアプリケーションがありますよね
MicroSoft 社の緑のアイコンでお馴染み
そう、Excel です
その Excel の読み書きを PHP でやってしまおう!というライブラリの1つが
タイトルにもある PhpSpreadsheet です。
前身である PhpExcel という、そのまんまネーミングのライブラリから改修を重ね、
良い感じ使えそうなやつではあるのですが ...
前回の記事 同様、今回も画像関連の罠を踏んだので共有しておきます
「Excel に画像を貼り付ける」
よく見かける光景です
歴史ある Excel ともなれば、画像の貼り付け方も1つではありません
今回見かけた貼り方の1つが「EMBED 関数」での貼り付けです
ご存知の通り、Excel 関数なので「=EMBED("", "")」みたいに使います
が、なんとこの関数
(おそらく)日本語環境の Excel である操作で貼り付けすると
関数に日本語名のエイリアスが適用され「=埋め込み("", "")」と記述されます!
され...る......のか?ともかく、そんな記述で動作している Excel ファイルが存在しました
さて、前回の記事を先に読んだ方はお察しの通り、
マルチバイト文字を含んだ関数を処理することにより
PhpSpreadsheet はシート内全ての画像オブジェクトを破壊し、
全ての画像が無かったようになる、という挙動をしました。
驚きの白さ。
皆様、PhpSpreadsheet を利用する際は
マルチバイトには気をつけましょう。