我目前正在使用grails开发一个web应用程序。其中一个要求是生成excel时间表并在事后下载它。这是我从grails控制器下载的代码。
response.contentType = "application/vnd.ms-excel"
response.setHeader("Content-Disposition","attachment;filename=name.xls")
response.outputStream << wb.bytes
response.outputStream.flush()但我的excel文件被破坏了。我可以使用开放的office打开它,但是使用microsoft office或google驱动器不起作用。看起来xls文件的内容没有很好的格式化。如果我保存文档而不是下载所有东西都可以。
FileOutputStream fileOut = new FileOutputStream("name.xls")
wb.write(fileOut)
fileOut.close()当以字节数组的形式下载时,我不知道为什么文件内容被破坏了。
Grails版本- 2.3.7 Apache poi版本- 3.13
提前谢谢你,
方法码
def generate(){
TimeSheetExportWrapper timeSheet = new TimeSheetExportWrapper()
bindData(timeSheet, params.ts)
HSSFWorkbook wb = excelExportService.createExcelTimeSheet(getCurrentTenant(), timeSheet, getCurrentTimezone())
response.contentType = "application/vnd.ms-excel"
response.setHeader("Content-Disposition", "attachment;filename=${timeSheet.proposedFileName}")
response.outputStream << wb.bytes
response.outputStream.flush()
}发布于 2016-03-22 14:56:42
有几件事你应该做:
首先,设置内容长度:response.setHeader("Content-Length", "${wb.bytes.length}")
其次,关闭输出:response.outputStream.close()
最后,确保您的return null确保Grails不尝试呈现视图。
def generate(){
TimeSheetExportWrapper timeSheet = new TimeSheetExportWrapper()
bindData(timeSheet, params.ts)
HSSFWorkbook wb = excelExportService.createExcelTimeSheet(getCurrentTenant(), timeSheet, getCurrentTimezone())
response.contentType = "application/vnd.ms-excel"
response.setHeader("Content-Length", "${wb.bytes.length}")
response.setHeader("Content-Disposition", "attachment;filename=${timeSheet.proposedFileName}")
response.outputStream << wb.bytes
response.outputStream.flush()
response.outputStream.close()
return null
}https://stackoverflow.com/questions/36156391
复制相似问题