easyexcel解析zip包加密excel文件

    /**
     *
     * zip包导入
     *
     * @param file excel导入
     * @return 结果
     */
    @PostMapping(value = "importZip")
    public void importZip(@RequestBody MultipartFile file) throws Exception {
        // 文件名称
        String fileName = file.getOriginalFilename();
        // 文件后缀
        String fileType = fileName.substring(fileName.lastIndexOf(".") + 1).toUpperCase(Locale.US);
        //
        ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream());
        ZipEntry zipEntry;
        while (zipInputStream.getNextEntry() != null) {
            byte[] buffer = new byte[1024];
            int len;
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            while ((len = zipInputStream.read(buffer)) != -1) {
                bos.write(buffer,0,len);
            }
            bos.close();

            // 写法1
            // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
            // 这里每次会读取100条数据 然后返回过来 直接调用使用数据就行
            EasyExcel.read(new ByteArrayInputStream(bos.toByteArray()), DemoData.class, new PageReadListener<DemoData>(dataList -> {
                for (DemoData demoData : dataList) {
                    log.info("读取到一条数据{}", JSON.toJSONString(demoData));
                }
            })).password("123").sheet().doRead();
//            // 写法2:
//            // 匿名内部类 不用额外写一个DemoDataListener
//
//            // 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
//            // 写法3:
//            EasyExcel.read(new ByteArrayInputStream(bos.toByteArray()), DemoData.class, new DemoDataListener()).sheet().doRead();
//            // 写法4
//            // 一个文件一个reader
//            try (ExcelReader excelReader = EasyExcel.read(new ByteArrayInputStream(bos.toByteArray()), DemoData.class, new DemoDataListener()).build()) {
//                // 构建一个sheet 这里可以指定名字或者no
//                ReadSheet readSheet = EasyExcel.readSheet(0).build();
//                // 读取一个sheet
//                excelReader.read(readSheet);
//            }

            // 写法1 读取多个sheet
//        try (ExcelReader excelReader = EasyExcel.read(new ByteArrayInputStream(bos.toByteArray())).password("123456").build()) {
//            // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
//            ReadSheet readSheet1 =
//                    EasyExcel.readSheet(0).head(DemoData2.class).registerReadListener(new DemoDataListener()).build();
//            ReadSheet readSheet2 =
//                    EasyExcel.readSheet(1).head(DemoData2.class).registerReadListener(new DemoDataListener()).build();
//            // 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能
//            excelReader.read(readSheet1, readSheet2);
//        }
        }
    }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值