poi读写excel

 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值