poi excel 导出注意事项
1、excel来源不同导出结果会不同
1.1、excel 由POI生成,文件完全由程序创建,可直接通过普通方式导出文件
try{ OutputStream os = response.getOutputStream(); wb.write(os); response.setContentType("application/msexcel;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=eport.xls"); os.flush(); os.close(); }catch (Exception e){ e.printStackTrace(); }
1.2、excel 文件为服务器文件,只通过POI读取修改后返回客户端完成下载需要通过以下方式进行操作,
否则文件流将被转成XML格式并返回客户端,客户端实际得到的将是文本
try{ OutputStream os = response.getOutputStream(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=export.xls"); response.flushBuffer();//注意此处操作,response先将设置的头部写出,通知客户端下面传输的是文件 wb.write(response.getOutputStream());//写出数据 os.flush(); os.close(); }catch (Exception e){ e.printStackTrace(); }
2、poi处理excel时,处理合并单元格等复杂操作需要先写入文本,然后合并单元格,避免生成的excel产生错误
如需要对第1行1~3单元个进行合并,并写入文本“合并单元格”需要按如下步骤操作
//写入文本,文本必须写入到指定要合并的一组单元格中第一个单元内,否则数据将丢失 HSSFRow row = sheet.createRow(1); HSSFCell cell = row.createCell(0); cell.setCellValue("合并单元格"); //合并指定单元格 CellRangeAddress cra=new CellRangeAddress(1, 1, 0, 2); sheet.addMergedRegion(cra);