2014年3月1日 : してログ

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 でマルチバイト文字が正しくないというエラーが出ますので、やめた方が良いです。 詳しくは分かりませんが、元のエラーはメモリ不足で出ていたように思います。

jQuery UI Dialog で modal: true としたダイアログで、再表示したときに操作不能になるという現象に遭遇しました。 操作不能というのは、ダイアログに配置したセレクトボックスは選択リストが表示されなくなり、テキストボックスはクリックしてもキャレットすら表示されないという状態です。 ただし、フォーカスは入っているらしく Chrome などで動かすと、枠の色が変わるのが分かります。 ちなみに、モーダルでなければそういうことにはなりません。

色々と調べた結果、作りおきのダイアログがあるとダメなことが分かりました。 問題のあったページでも、そのダイアログとは別に、autoOpen: false として作っておいて、必要なときに dialog('open') しているものがありました。 これを、ボタンやリンクがクリックされた際に、都度作るようにしてみたところ、問題が解決しました。 この現象でお悩みの方は、作りおきのダイアログが他に無いか調べてみてください。