我有一个包含信息的列表,我想将其导出到Excel。 我该怎么做?
“出口插件”有什么好处吗?我想我刚才看到将文件导出到Excel但我再也找不到了。
答案 0 :(得分:6)
如果您想要实际的 Excel文档(而不仅仅是CSV文件),我已经使用JExcel library取得了一些成功。这是一个快速编写的例子,可能是Groovy-fied一点点。
编辑:更新了我的示例以在控制器中执行此操作。从结构上来说,将它分开一点会更有意义,但这只是为了举例。
import jxl.*
import jxl.write.*
class SomeController {
def report = {
def file = createReport(MyDomain.list())
response.setHeader('Content-disposition', 'attachment;filename=Report.xls')
response.setHeader('Content-length', "${file.size()}")
OutputStream out = new BufferedOutputStream(response.outputStream)
try {
out.write(file.bytes)
} finally {
out.close()
return false
}
}
private File createReport(def list) {
WorkbookSettings workbookSettings = new WorkbookSettings()
workbookSettings.locale = Locale.default
def file = File.createTempFile('myExcelDocument', '.xls')
file.deleteOnExit()
WritableWorkbook workbook = Workbook.createWorkbook(file, workbookSettings)
WritableFont font = new WritableFont(WritableFont.ARIAL, 12)
WritableCellFormat format = new WritableCellFormat(font)
def row = 0
WritableSheet sheet = workbook.createSheet('MySheet', 0)
list.each {
// if list contains objects with 'foo' and 'bar' properties, this will
// output one row per list item, with column A containing foo and column
// B containing bar
sheet.addCell(new Label(0, row, it.foo, format))
sheet.addCell(new Label(1, row++, it.bar, format))
}
}
}
使用此库可以执行格式化,使用多个工作表等操作
答案 1 :(得分:1)
Grails Export Plugin非常出色:将域对象(或查询结果)列表以多种格式(包括Excel)导出到单个工作表(或页面)上。命名列,指示宽度,动态转换数据的能力非常好 - 我已经在几个项目中使用过它。
if( params.format && params.format != "html"){
response.contentType = grailsApplication.config.grails.mime.types[params.format]
response.setHeader("Content-disposition", "attachment; filename=Docs_${new Date().format('yyyy-MM-dd')}.${params.extension}")
List fields = ["documentNo", "modifiedBy", "modifiedDate"]
Map labels = ["documentNo": 'Document No', "modifiedBy":'Modified by', "modifiedDate":'Last modified']
def fullDocId = { domain, value ->
return domain.fullDocId()
}
def formatDate = { domain, value ->
return value.format('yyyy-MM-dd HH-mm')
}
Map formatters = [documentNo:fullDocId, modifiedDate:formatDate]
Map parameters = [title: "${query}", "column.widths": [20, 15, 15]]
exportService.export(params.format, response.outputStream, Document.list(), fields, labels, formatters, parameters)
}
然而,我还使用了Rob建议的JExcel,当我想要一个简单列表以外的东西时。适合工作的正确工具,以及所有这些。 : - )
答案 2 :(得分:0)
我一直在使用Grails的JXL插件一段时间,它运行得很好。
它甚至可以选择将Excel文件写入响应,以便用户可以使用我的REST服务直接下载文件。
链接是:http://grails.org/plugin/jxl
以下是创建工作簿的简单示例:
new ExcelBuilder().workbook('/path/to/test.xls') {
sheet('SheetName') {
cell(0,0,'DEF')
}
}
您可以找到更多信息here。