POI HSSFWorkbook中的getBytes方法

代码节选

//获取模板文件
InputStream is = (InputStream) getWsmbInputStream(cBhMb);
POIFSFileSystem fs = new POIFSFileSystem(is);
HSSFWorkbook excel = new HSSFWorkbook(fs);
HSSFSheet sheet = excel.getSheetAt(0);
//开始替换
... ...
//替换完成后拿到流
byte[] bytes = excel.getBytes();
InputStream resultInputStream = new ByteArrayInputStream(bytes);

我读取流拿到模板完成书签替换,然后调用了HSSFWorkbook的getBytes方法,转换成流存到了ftp,拿下来的文件竟然他喵的打不开,修复后打开了竟然完全丢掉了格式。。。
排查过程就不说了,排查结果是这样的,我又看了一遍这个getBytes这个方法,看到了这个说明:

Method getBytes - get the bytes of just the HSSF portions of the XLS file. Use this to construct a POI POIFSFileSystem yourself.

对不起。。。是我愚昧了
上面说的是你拿到的其实并不是一个完整的xls文件,但是我们可以自己用这个构造一个POIFSFileSystem实例。

然后为了达到我最初的目的,可以如下这样处理:

ByteArrayOutputStream os = new ByteArrayOutputStream();
excel.write(os);

你可能感兴趣的:(POI HSSFWorkbook中的getBytes方法)