5

我正在尝试将 Excel 文件发回给用户。在某种程度上,我的 excel 文件即使是空的也会损坏。当我打开文件时,Excel 告诉我文件已损坏。

如果我删除

response.getOutputStream().write(excelService.exportEventsToCSV());

我得到一个空的excel文件。

@RequestMapping(value = "/events/excel", method = RequestMethod.GET)
    public void getEventsAsExcel(HttpServletResponse response) {

        try {

            response.setHeader("Content-disposition", "attachment; filename=test.xls");
            response.getOutputStream().write(excelService.exportEventsToCSV());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

我的 XML 生成非常简单。只是空文档

@Override
public byte[] exportEventsToCSV() {
    try {

        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet worksheet = workbook.createSheet("POI Worksheet");
        HSSFCellStyle cellStyle = workbook.createCellStyle();


        workbook.write(fileOut);

        return workbook.getBytes();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

请任何建议。我正在考虑 Springs Excel 视图,但我不想要视图。只是一个下载的文件。

4

1 回答 1

12

您似乎在输出输出时做了一些非常奇怪的事情,我很确定这workbook.getBytes()并没有返回您认为的内容......

我强烈建议您更改exportEventsToCSV以返回工作簿,然后您可以做的更简单:

Workbook wb = excelService.exportEventsToCSV();
response.setHeader("Content-disposition", "attachment; filename=test.xls");
wb.write( response.getOutputStream() );

这应该可以正常工作并为最终用户提供他们所期望的那种东西

于 2012-11-10T21:42:35.350 回答