使用Java在内存中创建一个Excel文件,并以字节为单位进行下载

Ale*_*Man 5 java excel jxl in-memory

我已经使用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();
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗

usr*_*_11 7

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

    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();
Run Code Online (Sandbox Code Playgroud)


Rob*_*sen 6

使用ByteArrayOutputStream结合的Workbook.createWorkbook(OutputStream os)方法,在内存中创建的工作簿,并转储创建字节数组任何你想要的输出流。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
WritableWorkbook workbook = Workbook.createWorkbook(baos);

// ...

workbook.close();
out.write(baos.toByteArray());
out.flush();
out.close();
Run Code Online (Sandbox Code Playgroud)

另外,您也可以不使用中间字节数组而即时执行此操作:

WritableWorkbook workbook = Workbook.createWorkbook(out);

// ...

workbook.close();
out.flush();
out.close();
Run Code Online (Sandbox Code Playgroud)

此方法可能更可取,因为JXL仍然将工作簿保留在内存中,并且仅在关闭工作簿时才将其刷新到输出流。