利用Grails Export插件 导出数据(原创)

时间:2020-12-29 23:37:49

最近做一个小项目,碰到这个需求,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帮朋友开的一个小软件的一些使用心得。