Excelファイルのダウンロードためしてみた
といっても実際に.xlsファイルを生成するのではなく,HTMLを無理矢理Excelで開かせるという古典的やり方。元ネタは「Groovy Recipes(asin:0978739299)」より。
type1がGroovy Recipesから引用したもの。GrailsはUTF-8だけど,ExcelはShift_JISを期待しているからてっきり日本語はバケると思ってたら,意外に平気だった(GrailsはUnicodeエスケープした値を返す。加えて言えばExcelはUnicodeエスケープしてある値を復号してくれるワケだ)。
ちなみに,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で表示,みたいな使い回しもできると思う。