java 后台 Excel 文件生成后转化为字节流
2018-02-27 12:02
1986 查看
Java 后台 Excel 文件生成后转化为字节流 java excel 使用 poi组件, HSSFWorkbook workBook = new HSSFWorkbook(); 对于workBook生成字节流,很容易发现有个workBook .getBytes(),但是,是不可用的,下载以后打不开, 如果下载,正确的写法为 workBook.write(response.getOutputStream()); 如果转化为字节流: ByteArrayOutputStream os = new ByteArrayOutputStream(); try { workBook.write(os); ByteArray bytes = os.toByteArray(); String fileName = "xxx.xls"; response.reset(); response.setContentType("application/msexcel;charset=utf-8"); response.setHeader("Content-disposition", "attachment;filename= "+ fileName); response.getOutputStream().write(bytes.getRawBytes()); response.getOutputStream().flush(); response.getOutputStream().close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 上代码经过验证可行。 java excel 使用 poi组件, HSSFWorkbook workBook = new HSSFWorkbook(); 对于workBook生成字节流,很容易发现有个workBook .getBytes(),但是,是不可用的,下载以后打不开, 如果下载,正确的写法为 workBook.write(response.getOutputStream()); 如果转化为字节流: ByteArrayOutputStream os = new ByteArrayOutputStream(); try { workBook.write(os); ByteArray bytes = os.toByteArray(); String fileName = "xxx.xls"; runData.getResponse().reset(); runData.getResponse().setContentType("application/msexcel;charset=utf-8"); runData.getResponse().setHeader("Content-disposition", "attachment;filename= "+ fileName); runData.getResponse().getOutputStream().write(bytes.getRawBytes()); runData.getResponse().getOutputStream().flush(); runData.getResponse().getOutputStream().close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } dwr的写法 :ByteArrayOutputStream os = new ByteArrayOutputStream(); try { hssfWorkbook.write(os); return new FileTransfer(new String("XXXX.xls".getBytes(),"iso8859-1"), "application/ms-excel", os.toByteArray()); } catch (IOException e) { e.printStackTrace(); } 这里,我们使用了ByteArrayOutputStream和ByteArrayInputStream类...处理的思想是,将HSSFWorkbook 写入ByteArrayOutputStream.然后用ByteArrayOutputStream来转换为字节流..然后再将字节流转换为ByteArrayInputStream ..至此,我们就在内存中将excel转换成了输入流.. 代码如下 ByteArrayOutputStream os = new ByteArrayOutputStream(); try { wb.write(os); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] b = os.toByteArray(); ByteArrayInputStream in = new ByteArrayInputStream(b); 全部的代码太多,不贴上来了..相信大家都愿意用这个办法..因为使用之前说的那个产生随机文件名的办法.要繁琐的多... 总结 首先,我们必须明确我们所要实现的功能.我们在之前已经使用SHHF完成了excel的生成,现在的工作是将这个excel转换成输入流提供给struts2以实现下载...也就是说我们是要转换成输入流.... 明确了目标以后,我们将开始设计...我们的思路是,先创建一个输出流,将这个excel写入到输出流里面,然后再通过这个输出流来得到我们所需要的输入流...这里我们尝试了两张办法.第一种,就是使用临时文件的办法.我们创建的输出流先将内容写入到临时文件里面,然后我们从临时文件里读取输入流.这个办法我们用到的是FileOutputStream 和FileInputStream. 但是临时文件的问题让程序变得异常复杂,所以我们的目标改成在内存中完成对excel到输入流的转换.所以我们用到了ByteArrayInputStream 和ByteArrayOutputStream .其实就是这么简单.. 最后附上从Excel模板获得需要导出的EXCEL文件的输入流方法。 Java代码 public InputStream getExcelISForAs(List<Object> list) throws Exception { InputStream excelStream = null; FileInputStream fis = new FileInputStream(templatePath + "/template.xls"); HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(fis)); fis.close(); generateExcelForAs(list, wb);//填充EXCEL内容方法 ByteArrayOutputStream out = new ByteArrayOutputStream(); HSSFWorkbook hssWb = (HSSFWorkbook) wb; hssWb.write(out); excelStream = new ByteArrayInputStream(out.toByteArray()); out.close(); return excelStream; }
相关文章推荐
- java 后台 Excel 文件生成后转化为字节流
- java 后台 Excel 文件生成后转化为字节流
- java读取文件以字节流的形式读取 然后转化为字节流数组,最后经过SHA1加密生成返回16进制字符串存入数据库
- JAVA JXL -----excel文件生成、在线打开和下载
- 用 java 读取excel 文件里的时间格式数据时,24时制会自动转化为12时制,解决办法
- JAVA生成一个excel文件
- JAVA生成EXCEL文件
- JAVA处理Excel文件---生成简单的Excel文件
- java 层生成文件如csv,在excel中打开乱码
- JAVA处理Excel文件---生成简单的Excel文件
- java 生成excel文件,并进行操作
- JXL包大解析;Java程序生成excel文件和解析excel文件内容
- Java生成Excel文件通用程序
- java 生成excel文件例子
- 用 java 读取excel 文件里的时间格式数据时,24时制会自动转化为12时制,解决办法 .
- 前2天后台系统需要生成报表,正好抽时间复习了一下之前做过的JAVA生成EXCEL,下面介绍POI 和JXL 生成报表的2种方式。
- 使用JAVA通过JXL(JExcel)动态生成Excel文件 转载至台湾某博客
- JXL生成的excel文件+JAVA文件下载功能
- java生成Excel文件
- 如何在后台运行模式生成Excel格式文件(收藏)