最近做一個小項目,碰到這個需求,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=CSVdefault.excel=Exceldefault.pdf=PDFdefault.rtf=RTFdefault.xml=XMLdefault.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幫朋友開的一個小軟體的一些使用心得。