POI导出Excel笔记

导出excel是个常用的问题,然而这一次摸索之后并不知道下一次是什么时候再用,记录一下,方便自己


目录

常用的类型

  • HSSFWorkbook 所有工作的起点,可以创建HSSFSheet、HSSFCellStyle、HSSFFont等常用类型的对象
  • HSSFSheetsheet页,主要操作对象,创建/获取行对象最常用
  • HSSFCell 单元格
  • HSSFStyle 单元格样式,颜色,对齐`
  • HSSFFont 字体,可以加粗等
  • HSSFComment 备注,悬浮展示/点击展示
  • 导出一个基本的Excel这些类型足够了

代码

基本的练习代码:

//工作簿对象,所有的sheet都在在这个对象上操作,创建样式、创建sheet、
HSSFWorkbook workbook=new HSSFWorkbook();
//一个表格页面,可以用default构造,可以传入sheet名构造
HSSFSheet sheet=workbook.createSheet("可以的我的哥");
//绘制图形,不限于图形,比如备注也可放在这个容器中
HSSFPatriarch p= sheet.createDrawingPatriarch();
//绘制线条
p.createSimpleShape(new HSSFClientAnchor(2,1,2,2,(short)2,2,(short)2,2));
HSSFComment comment = p.createComment(new HSSFClientAnchor(0,  
            0, 0, 0, (short) 4, 2, (short) 6, 5));  
// 设置注释内容
comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));
//comment.setVisible(true);//控制注释是否直接显示,false为不可见,默认false


//样式对象、操作单元格的属性
HSSFCellStyle style2 = workbook.createCellStyle();  
style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);  
//设置填充模式,不设置填充模式,填充颜色将不生效
style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);  
style2.setBorderTop(HSSFCellStyle.BORDER_THIN);  
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);  
style2.setWrapText(true);// auto change line
style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// vertical be center
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// horizontal be center

//构建一个行,在excel的sheet中,行号是从1开始的,但是在对象操作时,从0开始
HSSFRow  row=sheet.createRow(1);
//构建一个单元格对象,对象的索引也是从0开始的,由行和指定 column唯一确定位置
HSSFCell cell=row.createCell((short) 1);

cell.setCellStyle(style2);
//区域对象
Region region =new Region((short)0, (short)0, (short)2, (short)2);      
//合并指定区域的单元格,ps:取合并单元格对象的时候,取得是第一个单元格的坐标
sheet.addMergedRegion(region);

Excel文件输出

  1. 本地保存
workbook.write(new FileOutputStream(new File("path.xls")));
  1. 从服务器发送给客户端
//通过写成byte[]对象,就可以利用response对象以附件的形式返回给浏览器,直接下载
  public byte[] getBytes() throws IOException {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    workbook.write(out);
    return out.toByteArray();
  }

//body参数就是上面getBytes()产生的数组了
private void writeExcelToClient(byte[] body, HttpServletResponse response,
            String fileName) throws IOException {
        //指明内容类型,没深究这个类型问题,下回
        //在项目里,这里试过2-3种类型,最终客户端都正常接收了...(狗血...
        response.setContentType("multipart/form-data");
        response.addHeader("Content-Disposition", "attachment;filename="
                + fileName);
        response.setContentLength(body.length);
        OutputStream out = response.getOutputStream();
        out.write(body);
        out.close();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值