如何将POI HSSFWorkbook转换为字节?

60

调用简单的toBytes()确实会生成字节,但Excel会抛出警告。

丢失文档信息

在Google上搜索得到这个链接,并查看工作表和POI HOW-TOJavadocs,它们说了类似的事情。基本上,我无法获取不丢失某些信息的Bytes,而应该使用write方法。

虽然写入(write)方法可以正常工作,但我真的需要发送这些字节。有没有办法可以做到这一点?也就是说,获取字节而不会得到任何警告。

2个回答

124

正如邮件列表中所说的那样:

调用HSSFWorkbook.getBytes() 不会返回重建完整 Excel 文件所需的所有数据。

您可以使用 ByteArrayOutputStream 的写入方法来获取字节数组。

ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
    workbook.write(bos);
} finally {
    bos.close();
}
byte[] bytes = bos.toByteArray();

(对于ByteArrayOutputStream,实际上不需要进行close调用,但是我个人认为最好还是包含这个调用,以防它稍后更改为其他类型的流。)


1
我们如何以相反的方式做到这一点呢?我的意思是将字节数组转换为HSSFWorkbook? - Chetan Nellekeri
@ChetanNellekeri 最好单独提出这个问题。 - Jörn Horstmann
1
对于任何使用C#的人,这基本上也适用,ByteArrayOutputStream在NPOI.utils中可用。 - Max Carroll

23

这怎么样:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
byte[] xls = baos.toByteArray();
为了获取完整的Excel文件,您必须调用write(OutputStream)方法。如果您想从中获取字节,请使用ByteArrayOutputStream。

为了获取完整的Excel文件,您必须调用write(OutputStream)方法。如果您想从中获取字节,请使用ByteArrayOutputStream


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接