PHPExcel はとにかく遅いし、バグも多いのでできれば使いたくないですよね。 でも、xlsx に出すなら使うしかなくて、そんなときはおっかなびっくり使うしか無い、です。 さて、今日はこのエラー「Maximum 31 characters allowed in sheet title」が唐突に出るようになりました。
メッセージからすると、31文字を超えるシート名は使えない、ということになろうかと思います。 しかし、正しく処理できていたエクセルファイルを保存しなおしただけで、このエラーが出るようになったので、訳が分かりません。 念のため、すべてのシートの文字数をチェックしましたが、31文字を超えるものはありませんでした。 Google 先生に聞いてみると、ライブラリに応急手当てして無理やり出ないようにしたという記事が幾つかみつかります。 原因はともかく、私もそれに習って修正してみました。
Classes/PHPExcel/Worksheet.php
public function setTitle($pValue = 'Worksheet', $updateFormulaCellReferences = true)
{
$pValue = substr($pValue, 0, 31); // この行を追加
(追記)この対応をすると、iconv でマルチバイト文字が正しくないというエラーが出ますので、やめた方が良いです。 詳しくは分かりませんが、元のエラーはメモリ不足で出ていたように思います。