使用POI创建表格
POI是Apache提供的用于解析MS Office文档的工具类库,关于POI的使用本文不详细说明。
项目新增加导出excel表格的需求,百度后发现很多解决方案都是采用POI生成临时文件到本地,然后返回生成的文件给前端,甚至还有返回新的url或者重定向的。私以为不够优雅,不够高效。
采用byte[]
直接返回文件
既然下载文件时是给前端直接返回的byte[]
,那我们后端是不是也能直接把XSSFWorkbook
对象转换为byte[]
来直接返回呢?XSSFWorkbook
输入文件时是调用的write(OutputStream stream)
方法将当前excel文件写入到一个输出流里面,那我们尝试实例化一个ByteArrayOutputStream
,然后写入它试试。123XSSFWorkbook sheets=new XSSFWorkbook();ByteArrayOutputStream out = new ByteArrayOutputStream();sheets.write(out);
接着把这个输出流转换成byte[]
12byte[] output=out.toByteArray();out.close();
注意这里一定要关闭掉输出流,否则会照成内存泄露。
然后直接返回得到的byte[]
即可,一测试,顺利通过。关于文件下载不具体说明。
需要的话可以参考Angular多文件上传