Grails - 从服务迭代到csv文件 - Groovy

时间:2015-12-04 20:30:10

标签: csv grails groovy

如何将结果图迭代到CSV文件中? 当我在控制器块中使用我的方法时,我可以很好地迭代它们但是如果我把它放在服务中并调用它,它就不会识别该键并返回空行。 (it.column_1无法识别。)

class someController {
    def someService

    def export(Person personInstance) {
        def resultRows = someService.result(personInstance)

        response.setHeader("Content-disposition", "attachment; filename=sample.csv")
        response.contentType = "application/vnd.ms-excel"

        def outs = response.outputStream

        outs << "${personInstance}\n"
        outs << "Column1,Column2,Column3,Column4\n"

        resultRows.each() { 
            outs << it.column_1 + "," + it.column_2 + "," + it.column_3 + "," + it.column_4
            outs << "\n"
        }
        outs.flush()
        outs.close()
    }       
}

提前谢谢。

修改 我已经包含了有效的代码。

当我将someService.result打印到控制台后,立即打印结果行

[[column_1:John,column_2:Doe,column_3:123 Main Street,column_4:(123)456-7890] [column_1:John,column_2:Doe,column_3:123 Main Street,column_4:(123)456- 7890]

使用以下代码,我得到一个excel格式的可下载CSV文件。

class someController {

    def export(Person personInstance) {
        def sql = new Sql(dataSource)
        def resultRows = sql.rows('select * from table where person_id = ?', [personInstance.id])

        [resultRows:resultRows]

        response.setHeader("Content-disposition", "attachment; filename=sample.csv")
        response.contentType = "application/vnd.ms-excel"

        def outs = response.outputStream

        outs << "${personInstance}\n"
        outs << "Column1,Column2,Column3,Column4\n"

        resultRows.each() { 
            outs << it.column_1 + "," + it.column_2 + "," + it.column_3 + "," + it.column_4
            outs << "\n"
        }
        outs.flush()
        outs.close()
    }       
}

编辑 - 找到答案

啊,我弄明白了这个问题。我在服务中有[resultRows:resultRows]。我删除了该行并将其放在def resultRows行下的控制器中。

def export(Person personInstance) {
    def resultRows = someService.result(personInstance)
    [resultRows:resultRows]
....
}

谢谢你们!

1 个答案:

答案 0 :(得分:2)

啊,我弄明白了这个问题。我在服务中有[resultRows:resultRows]。我删除了该行并将其放在def resultRows行下的控制器中。

def export(Person personInstance) {
    def resultRows = someService.result(personInstance)
    [resultRows:resultRows]
....
}

谢谢你们!