excel读写与文件的读写没有本质的区别,都是与io有关,你甚至可以用io来进行excel的读写,只是这样会十分的麻烦.
于是我们就想是不是有第三方的组件工具来解决该问题呢?
有:poi与easyExcel(阿里巴巴开源的)
常用的场景:
1.将用户信息导出为excel表格(导出数据..)
想将网络上的大量数据保存,就需要导出
2.将excel表中的信息录入到网站数据库(习题上传);
大量数据的录入,比如在线教育习题网站(收集大量题目,将其写到excel中但是这并不代表就能用了,根据格式de 要求,上传网站,网站有段程序,用poi写的,或者用easyExcel写的,根据格式回填导数据库里面)大大减轻了网站的录入量,网站的录入麻烦,要一个框一个框的写.
开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中!
操作Excel目前比较流行的就是Apache POI和阿里巴巴的easyExcel !
HSSF与XSSF本身都是操作excel,但是他们有什么区别呢?
其实是因为版本的区别:
HSSF是03版的(最多存在65535行),XSSF对应的excel版本是07版的.
HSLF是对于幻灯片进行操作
问题:内存问题
1.假设要用poi存入100万条数据,数据量十分巨大
工作时会先加载到内存,再写入文件.如果内存较小,在java中会报OOM异常
poi是一次性将所有内容读到内存中,然后全部返回.
easyExcel是通过磁盘一行一行读取,一行一行返回.
显著的区别就是性能的区别.
poi十分的消耗内存,EasyExcel对poi做了一些优化,保证不会出现内存溢出(使使用开发者更加的简单 (读,写excel只需要一行代码)).
市面上的一些工具类还是会使用poi(就是封装了咱们得poi形成的一些工具类).
该代码是从数据库导出数据在写入excel表中:
public void export(){//从导出,写excel
AnnotationConfigApplicationContext
context = new AnnotationConfigApplicationContext(AppConfig.class);
//1.读取数据库中的数据
List<BookEntity> bookEntities = context.getBean(BookService.class).mysqlDataExport();
//2.将数据写入到excel表格中
//工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
//工作表
XSSFSheet sheet = workbook.createSheet();
//创建行
XSSFRow rowhead = sheet.createRow(0);
rowhead.createCell(0).setCellValue("编号");
rowhead.createCell(1).setCellValue("书名");
rowhead.createCell(2).setCellValue("价格");
for (int i = 0; i < bookEntities.size(); i++) {
XSSFRow row = sheet.createRow(i+1);
row.createCell(0).setCellValue(bookEntities.get(i).getBid());
row.createCell(1).setCellValue(bookEntities.get(i).getBname());
row.createCell(2).setCellValue(bookEntities.get(i).getPrice());
}
FileOutputStream outputStream = new FileOutputStream(path+"export.xlsx");
workbook.write(outputStream);
outputStream.close();
outputStream.flush();
workbook.close();
log.debug("写入成功");
}
用了mybitis和springframework