Excelファイルのダウンロードためしてみた

といっても実際に.xlsファイルを生成するのではなく,HTMLを無理矢理Excelで開かせるという古典的やり方。元ネタは「Groovy Recipes(asin:0978739299)」より。


type1がGroovy Recipesから引用したもの。GrailsUTF-8だけど,ExcelShift_JISを期待しているからてっきり日本語はバケると思ってたら,意外に平気だった(GrailsUnicodeエスケープした値を返す。加えて言えばExcelUnicodeエスケープしてある値を復号してくれるワケだ)。
ちなみに,Grails 1.0.4でExcel XPの話ね。


type1のように renderメソッドのクロージャに渡すBuilderが何なのかは調べきれてないが,MarkupBuilderじゃないのは分かった。その根拠に yield や yieldUnescape が効かない。


時にはタグを含む値をサニタイズしないで,そのまま展開したいって事もあろう。試行錯誤の結果,たどり着いたのがtype2のパターン。こっちはMarkupBuilderで組み立てた文字列を renderメソッドの textに与えている。なんでか知らんが,この時はUnicodeエスケープがかからずUTF-8で返る。
ダメ元で encoding に 'Shift_JIS' を指定したらコード変換してくれた。てっきりHTTPレスポンスヘッダに'Shift_JIS'って書き込む程度だろうと高をくくってただけに,ちょっと感心した。:-P


とりあえず帳票をExcelで開かせるには,最もお手軽なやりかた。contentType偽装してるだけなので,もう少し工夫すればWebブラウザでプレビュー→Excelで表示,みたいな使い回しもできると思う。