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);