刚好工作中用到此功能,网上找了一下,有很多例子,但在我这都试验不成功,可能是我的RP问题。只好慢慢摸索,将人家的例子改成以下的样子,终于通过了:
首先在包(package)的开头增加输入语句:
import org.codehaus.groovy.grails.commons.ConfigurationHolder
不然后面response.setHeader等子程序将无法解析。其余的代码如下:
response.setHeader("Content-disposition", "attachment; filename=bxmx-list.csv")
response.contentType = "application/vnd.ms-excel" //在这里设置charset多余,csv文件永远都只是ansi格式。
render(text:"序号,姓名,日期,其他字段等\r\n",encoding:"GB2312") //这里encoding是关键,不然excel打开乱码,
// 奇怪的是,记事本打开永远都不乱码。
def outp=Bxmx.findAll() //这里可以查找数据,你可以用findAllBy等其他手段
outp.each{
render(text:it.xuhao+',') //序号是数字,无需转码
render(text:it.name+',',encoding:"GB2312") //姓名是由中文字符的,需要转码
render(text:it.date.format('yyyy-MM-dd')+',') //日期无需转码
.......
render(text:'\r\n')
}
return false
题外话,这个日期格式的转换,我起初在Grails的文档找不到资料,后来才想起在Groovy的网站上找,找到文档后试验时又不小心用了'yy-mm-dd',怎么结果是乱的?可见我是完全不懂java,原来中间那个mm必须是大写。