poi使用详解

1.excle的2个版本区别
(1).03版本和07版本使用的技术不一样,07版使用的是ooxml,底层用xml实现,查询效率高.
(2).03版和07版支持的行数和列数不一样.
(3).03版是以xls结尾,07版是以xlsx结尾的.
(4).两个版本使用的对象因为不一样03使用hssf,07使用xssf.面向接口编程好处是当更换版本的时候只要更换实现类就可以.当都需要操作时,可以通过判断文件名来确定使用哪一个实现类.
2.maven中引入poi配置

org.apache.poi
poi
3.11


org.apache.poi
poi-ooxml
3.11


org.apache.poi
poi-ooxml-schemas
3.11

3.使用poi的8个步骤
(1)创建一个工作簿workbook
Workbook wb = new HSSFWorkbook();
(2)创建一个工作表sheet
Sheet sheet = wb.createSheet();
sheet.setColumnWidth(cellNo++, 26*256);//可设置列宽
(3)创建一个行对象row(下表从0开始)
Row row= sheet.createRow(rowNo++);
row.setHeightInPoints(36);//可设置行高
(4)创建一个单元格对象cell(下表从0开始)
Cell cell = nRow.createCell(cellNo);
(5)给单元格设置内容
cell.setCellValue();
(6)给单元格设置样式
cell.setCellStyle();
(7)保存关闭流对象
ByteArrayOutputStream baos = new ByteArrayOutputStream();//流 内存中的缓存区
wb.write(baos);//将excel表格中的内容输出到缓存
baos.close();//刷新缓存
(8)下载
ServletOutputStream outputstream = response.getOutputStream(); //取得输出流
byteArrayOutputStream.writeTo(outputstream); //写到输出流
byteArrayOutputStream.close(); //关闭
outputstream.flush();
filename = URLEncoder.encode(filename,”utf-8”);//解决下载文件名乱码
4. 百万数据级别POI.
当数据很大时不同的工具又不同的处理方法,例如hibernate单表记录超过500w时就要考虑换成mybatis或jdbc了.oracle单表数据过亿时就要考虑将一个表中的数据拆成多个表了.
对于百万级别的poi报表(只有07版行数才能到达百万),使用xssf操作会导致内存溢出.这里可以使用jdk自带的内存监控软件查看jvisualvm.理论上应该使用sxssf对象这个对象可以指定一个整数型参数,当内存中的对象到达这个值时就开始往磁盘转移对象.这个类不支持模板读取.
使用sxssf对象也会导致内存溢出,原因是创建对象要远远大于磁盘写入速度.大概差3个数量级.这就是sxssf理论上可以处理的原因.非要操作可以Thread.sleep().极其影响效率.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值