勝手xlsでセル内改行

WebアプリでCSVを吐き出して、利用者様にはExcelで開いてもらう場合、おそらく巷で良く起こっていると思われる現象…
『電話番号の最初の"0"が表示されんぞゴルァLink

というわけで、CSV形式ではなく、Excelが直接読める形式にすることによって、Webアプリ側で書式設定を施す。という方法。

◎ヘッダーで、
Content-Type: application/vnd.ms-excel
Content-Disposition: attachment; filename="katte.xls"
◎ボディのHTMLヘッダで、
<style>
.string {mso-number-format:"¥¥@";}
</style>
◎ボディのHTMLボディでTABLE組んで、
<td style="string">09090909090</td>

というお話は今回のメインではないので、詳しく知りたい方は上記キーワードでググれかし。

で、上記方法で、セル内改行を行いたい場合に困った。
まずは、改行文字のみだと、その部分に空白が表示されるだけ。
というわけで、PHPでいうところのnl2br()で<br>タグに変換すると…
なんか、改行の数だけ行数が増えて、同行の改行なしのセルは勝手に結合されて、、、

グーグル先生に聞いてもご機嫌ナナメだし…
でも、ヒントは賜った。

Excelシート自体が検索に引っ掛かり、そのソースが表示された。
…実際に作ってソースを解析すればいいんだ。
さあ、Excelを起動、セル内改行を作って、「Webページとして保存」。テキストエディタで開く。
どんなスタイルを使っているんだ…?

紆余曲折を経て、
br {mso-data-placement:same-cell;}
brタグ全体に指定されてたのね…orz
セルに指定されたスタイルのどれが効いてるのか必死に探しちまったよ。
早く気付けよ、俺。

というわけで、さっきのスタイル指定を
<style>
br {mso-data-placement:same-cell;}
.string {mso-number-format:"¥¥@";}
</style>
な感じにしましょう。

PHP セル内改行 勝手xls csv

— posted by たか at 11:31 am   pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
Created in 0.0042 sec.
prev
2010.3
next
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
 
blogBar
Firefox3 Meter