在内存中使用Java创build一个Excel文件,并作为字节传递下载

我用jxl库创build了一个excel文件。 代码工作正常,但唯一的问题是,每次从服务的dynamic值构build一个Excel文件,Excel内容覆盖到一个test.xls如下所示。 有没有什么办法可以在内存中创build一个excel并传递字节来下载它,而不是创build一个外部文件(“ test.xls ”)

File file = new File("test.xls"); WritableWorkbook workbook = Workbook.createWorkbook(file); : : : : InputStream in = new FileInputStream(file); if (in == null) { out.close(); } else { byte[] buffer = new byte[4096]; int len; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } out.flush(); in.close(); out.close(); } 

任何人都可以请帮助我

使用ByteArrayOutputStream结合Workbook.createWorkbook(OutputStream os)方法在内存中创build工作簿,并将创build的字节数组转储到所需的任何输出stream。

 ByteArrayOutputStream baos = new ByteArrayOutputStream(); WritableWorkbook workbook = Workbook.createWorkbook(baos); // ... workbook.close(); out.write(baos.toByteArray()); out.flush(); out.close(); 

或者,您可以在不使用中间字节数组的情况下进行:

 WritableWorkbook workbook = Workbook.createWorkbook(out); // ... workbook.close(); out.flush(); out.close(); 

这个方法可能会更好,因为JXL将工作簿保存在内存中,只有在工作簿closures时才刷新输出stream。

这里是使用POI创buildexcel并将其转换为字节的示例。

  XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("Sheet 1"); Row row = sheet.createRow(1); Cell cell = row.createCell(cellnum++); cell.setCellValue((String) obj); ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { workbook.write(bos); } catch (IOException e) { } finally { try { bos.close(); workbook.close(); } catch (IOException e) { } } byte[] bytes = bos.toByteArray();