从HSSFWorkbook生成xls文件

时间:2015-01-16 13:45:29

标签: excel file export apache-poi bytearray

我正在创建一个excel文件:

public byte[] createReport() {
    List<ExportModel> exportModels = export.computeExportModels();
    HSSFWorkbook workbook = excelCreator.createWorkbook(exportModels);

    // return workbook.getBytes();
    return getByteArray(workbook);
}

private byte[] getByteArray(HSSFWorkbook workbook) {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
        workbook.write(bos);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return bos.toByteArray();
}

虽然这确实有效,但它不适用于

workbook.getBytes();

如果我尝试打开生成的xls文件,Excel只会崩溃而无法打开它。你有这方面的经验吗?

1 个答案:

答案 0 :(得分:0)

来自Apache POI javadocs for HSSFWorkbook.getBytes()

  

public byte [] getBytes()

     

方法getBytes - 获取XLS文件的HSSF部分的字节。用它来自己构建一个POI POIFSFileSystem。

Excel .xls个文件必须包装在外部OLE2容器中,例如由POIFSFileSystem生成。因此,您需要自己完成所有这些操作,或者只需拨打HSSFWorkbook.write(OutputStream)即可为您完成所有操作(如javadocs explain

如果你想写一个HSSFWorkbook,并获取它的字节,那么除非你想做一些非常特别的事情,否则就这样做:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
bytes[] excelFile = baos.toByteArray();