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().极其影响效率.
poi使用详解
最新推荐文章于 2023-07-30 14:49:15 发布