最近做一个小项目,碰到这个需求,Java的POI貌似在Grails下不太好用。
于是研究了官方网站Export插件,正好帮我解决了这个问题,以下和大家分享下我的经验和心得
当然 如果你没有Grails 的 Export插件, 你就可能需要事先安装和配置:
安装插件命令:grails install-plugin export
然后在你的Project下面的config里面配置,
在grails.mime.types=[]内加入信息如下:
csv: 'text/csv',
pdf: 'application/pdf',
rtf: 'application/rtf',
excel: 'application/vnd.ms-excel',
ods: 'application/vnd.oasis.opendocument.spreadsheet',
You can customize the labels displayed on the export bar by adding the following lines to grails-app/i18n/messages.properties:
default.csv=CSV
default.excel=Excel
default.pdf=PDF
default.rtf=RTF
default.xml=XML
default.ods=ODS
然后在你需要到处数据的页面,加入如下标签:
<export:resource />
<export:formats />
或者可选:
<export:formats formats="['csv', 'excel', 'ods', 'pdf', 'rtf', 'xml']" />
然后在你对应的Controller中加入:
1.导出字段名根据你数据库的字段命名,且无序:
def exportService//导入export
if(params?.format && params.format != "html"){
response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
response.setHeader("Conten-disposition","attachment:filename=vaccines.${params.extension}")
exportService.export(params.format,response.outputStream,Vaccine.list(params),[:],[:])
2.根据自己命名和顺序来排列字段,例如:
if(params?.format && params.format != "html"){
response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
response.setHeader("Conten-disposition","attachment:filename=vaccines.${params.extension}")
List fields = ["address","parents","name","dateOfBirth","sex"]
Map labels = ["address":"家庭地址","parents":"家长姓名","name":"儿童姓名","dateOfBirth":"出生时间","sex":"性别"]
def upperCase ={domain,value->//这段貌似是检查
return value.toUpperCase()
}
Map formatters = [address:upperCase]
Map parameters = [parents:"King","column.widths":[0.2,0.3,0.5]]//这段貌似是固定格式
exportService.export(params.format,response.outputStream,Vaccine.list(params),fields,labels,formatters,parameters)
}
3.根据检索结果导出数据,例:
首先在需要导出的GSP页面上加入
<export:resource />
<export:formats params="${filterParams?filterParams:params}"/>
controller里面和上面不同的地方在:
exportService.export(params.format,response.outputStream,Waybill.createCriteria().list(params,filter),fields,labels,[:],[:])
数据获取方式要改下,这样基本就OK了!
好了,花费不到20分钟,就可以到处你的数据了。
关于根据才查询结果来导出数据,一直还没有时间来得及实验,等系统上线后,再添加进去
但是我还遇到一个问题,就是只能导出当前页的数据内容,无法导出所有数据。
如有高手,请指点一二。
谢谢,以上是我前几天用Grails帮朋友开的一个小软件的一些使用心得。