我正在使用Apache POI库对多个excel文件执行某些操作。
我正在尝试下载excel报告而不将其存储在服务器中的某个位置。
我正在使用Struts 2,它需要将文件输入InputStream
,而POI工作簿需要OutputStream
来将数据写入。
任何帮助都会很棒
答案 0 :(得分:2)
由于您已经知道需要Stream结果:
我正在使用Struts 2,它需要将文件输入
InputStream
// With Getter
private InputStream inputStream;
您已经知道如何使用POI创建Excel:
POI工作簿需要
OutputStream
将数据写入。
public String execute(){
// stuff
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// fill the OutputStream with the Excel content
workbook.write(baos);
然后唯一缺失的部分是如何将POI的OutputStream转换为Struts2 Stream结果的InputStream。这比其他人容易..:
// Create an Input Stream from the bytes extracted by the OutputStream
inputStream = new ByteArrayInputStream(baos.toByteArray());
return SUCCESS;
}
答案 1 :(得分:-1)
这是怎么做的。
@RequestMapping(value = "/report/generate", method = RequestMethod.GET)
public ResponseEntity download(HttpServletResponse response) throws IOException {
//..code to create your excel here using poi
//Write data to outputstream
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
if(workbook != null && outputStream != null) {
workbook.close();
outputStream.close();
}
//get bytes
byte[] documentContent = outputStream.toByteArray();
//prepare header
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
headers.set(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"report.xlsx\"");
headers.setContentLength(documentContent.length);
return new ResponseEntity(documentContent, headers, HttpStatus.OK);
}