填充java中的值后,Excel下载无法正常工作

在我的应用程序中使用spring和angularjs和java,在单击button时,有一个ajax调用,从db中获取数据,数据需要写入excel文件,并且需要在浏览器中下载相同的文件。 我附加了相同的代码片段。

现在的问题是,即使正在提取数据,我可以使用poi将其绑定为工作表,但excel文件绝不会以浏览器的forms下载。

请帮助我find正确的解决scheme。 谢谢。

fileName.append(Calendar.get(Calendar.SECOND)); fileName.append(oCalendar.get(Calendar.MILLISECOND)); Sheet sheet = workbook.createSheet("Transaction" + fileName.toString()); CellStyle style = workbook.createCellStyle(); style.setFont(font); Row header = sheet.createRow(0); header.createCell(0).setCellValue("Name"); header.createCell(1).setCellValue("ACC"); header.createCell(2).setCellValue("Date"); header.createCell(0).setCellValue("TRANSACTION_RECONCILIATION_IDENTIFIER"); header.createCell(1).setCellValue("ORIGINAL_RECONCILIATION_IDENTIFIER"); header.createCell(2).setCellValue("STR_TRANSACTION_Date"); response.setHeader("Content-Disposition", "attachment; filename=\"TransactionDetails.xls\""); OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); 

在写输出stream之后,你应该使用response.flushBuffer();

看起来像缺lesscontentType定义。 在调用write()方法之前,请尝试设置contentType,如下所示:

response.setContentType("application/octet-stream");

这应该告诉浏览器从服务器下载。 在这里提出了一个相关的问题: response.setContentType(“APPLICATION / OCTET-STREAM”)

在我的代码中,我写这样的:

 response.setContentType("application/octet-stream"); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Content-Disposition", "attachment; filename=TransactionDetails.xls"); workbook.write(response.getOutputStream()); 

希望这可以帮助