我已经使用 jxl 库创建了一个Excel文件。该代码运行良好,但是唯一的问题是,每次根据来自服务的动态值来构建excel文件时,excel内容都会被覆盖到 test.xls 上,如下所示。有什么方法可以在内存中建立Excel并传递字节以进行下载,而不是创建外部文件(“ 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)
方法在内存中创建工作簿,并将创建的字节数组转储到所需的任何输出流。
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仍然将工作簿保留在内存中,并且仅在关闭工作簿时才将其刷新到输出流中。
关于java - 使用Java在内存中创建一个excel文件,并以字节为单位进行下载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40253515/