Ich arbeite derzeit an einer Web-Anwendung mit Grails. Eine der Anforderungen besteht darin, Excel-Arbeitszeittabellen zu erstellen und sie anschließend herunterzuladen. Dies ist mein Code zum Herunterladen von Grals Controller.Groovy/Grails Dokument herunterladen
response.contentType = "application/vnd.ms-excel"
response.setHeader("Content-Disposition","attachment;filename=name.xls")
response.outputStream << wb.bytes
response.outputStream.flush()
Aber meine Excel-Datei ist beschädigt. Ich kann es mit Open Office öffnen, funktioniert aber nicht mit Microsoft Office oder Google Drive. Sieht aus wie der Inhalt der XLS-Datei nicht gut formatiert ist. Wenn ich Dokument speichern, anstatt alles herunterzuladen, ist alles in Ordnung.
FileOutputStream fileOut = new FileOutputStream("name.xls")
wb.write(fileOut)
fileOut.close()
ich nicht herausgefunden, warum der Inhalt der Datei beschädigt ist, wenn sie als Byte-Array heruntergeladen.
Grails Version - 2.3.7 Apache poi Version - 3.13
Vielen Dank im Voraus,
Methode Code
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()
}
Veröffentlichen Sie Ihre gesamte Controller-Methode. Es könnte etwas vor/nach dem sein, was du gepostet hast. –
http://stackoverflow.com/questions/15387243/apache-po-a-working-with-xssfworkbok-servlet-response Ich habe es funktioniert mit dieser Methode – Vahid
Es gibt ein paar Dinge, die Sie tun sollten. 1. Fügen Sie die Inhaltslänge zum Header hinzu, 2. schließen Sie den outputStream 'response.outputStream.close()' und 3. 'return null', nachdem Sie den Stream geschlossen haben, damit Grails keine Ansicht rendern kann. –