hutool工具使用:EXECL的导入导出

这篇博客介绍了如何在Java中利用Hutool和Apache POI库来实现Excel数据的导出和导入功能。首先,通过添加相关依赖,然后展示了如何导出数据,包括设置单元格宽度、高度,转换字典值并写入到Excel文件。接着,演示了数据的导入过程,读取Excel文件,进行字典值转换,并将数据保存到数据库。整个过程中涉及到字典映射、数据处理和文件流操作。
摘要由CSDN通过智能技术生成

1.引入依赖

   <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.1.0</version>
            </dependency>
            <!-- Excel导出 -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.17</version>
            </dependency>

2.导出功能实现

先参考Hutool参考文档

   @RequestMapping(value = "excle")
    @ResponseBody
    public void excle(HttpServletRequest request, LawInspectRecord lawInspectRecord, RedirectAttributes redirectAttributes, HttpServletResponse response) {
        Date date = new Date();
        lawInspectRecord.setInspectType("1");
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmm");
        try {
            Page<LawInspectRecord> page = lawInspectRecordService.findPages(new Page<LawInspectRecord>(request, response), lawInspectRecord);
            //查出所有数据
            List<LawInspectRecord> Sale = page.getList();
            ExcelWriter writer = ExcelUtil.getWriter(true);
            writer.setColumnWidth(-1, 30);
            writer.setRowHeight(-1, 20);
            //     String fileName = "订单信息数据"+format.format(date);
            //      FileOutputStream output = new FileOutputStream("D:\\data"+fileName+".xls");
            //存储循环后的数据
            List<LawInspectRecord> lis = new ArrayList<>();
            Sale.forEach(s -> {
                /*进行字典值转换*/
                String res = lawInspectRecordService.findByresult(s.getResult());
                String color = lawInspectRecordService.findByColor(s.getHpys());
                String carType = lawInspectRecordService.findByCartype(s.getVehicleType());
                String fuelType = lawInspectRecordService.findByFueltype(s.getRlzl());
                s.setVehicleType(carType);
                s.setRlzl(fuelType);
                s.setResult(res);
                s.setHpys(color);
                lis.add(s);

            });
               //指定对应元素对应列
            writer.addHeaderAlias("motorOwner", "机动车所有人");
           //未指定的元素是否展示
            writer.setOnlyAlias(true);
            writer.write(lis);
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=road_check" + System.currentTimeMillis() + ".xlsx");
            ServletOutputStream out = response.getOutputStream();
            writer.flush(out, true);
            // 一次性写出内容

            //     writer.flush(out);
            // 关闭writer,释放内存
            writer.close();
            IoUtil.close(out);
            logger.info("__________数据导出成功!");

            /* return 
        } catch (Exception e) {
            e.printStackTrace();
            logger.info("数据导出失败!");
        }
        addMessage(redirectAttributes, "数据导出成功!");
 

    }

3.导入功能

 @RequestMapping("importXls")
    @ResponseBody
    public ApiResponse importXls(@RequestParam(value = "impfile", required = false) MultipartFile file, HttpServletRequest request, OverVehicle overVehicler, RedirectAttributes redirectAttributes) {
        try {
            InputStream bookStream = file.getInputStream();

          //  String sbcsId = ObdUtils.getSbcsId(UserUtils.getUser().getId());

            ExcelReader xls = ExcelUtil.getReader(bookStream);
            if(xls!=null&&xls.getRowCount()>0) {

                      //指定导入列对应元素,用map存储
                HashMap<String, String> headerAlias = new HashMap<>();
                headerAlias.put("车牌号", "vehicleNumber");
      
                headerAlias.put("车主电话", "vehicleHosterPhone");
          //      String update_flag=UserUtils.getUser().getLoginName()+"-"+ DateUtil.now();
                xls.setHeaderAlias(headerAlias);
                  //拿到元素后用list存储
                List<OverVehicle> list = xls.read(0, 1, OverVehicle.class);
               list.forEach(s->{
                     //字典值转换
                   s.setDelFlag("0");
                   if(StringUtils.isNotBlank(s.getFuelType())){
                    String  fuelType= s.getFuelType();
                    String fueltt=   overVehicleService.findBytype(fuelType);
                    s.setFuelType(fueltt);
                   }
                   if(StringUtils.isNotBlank(s.getVehicleType())){
                       String  hicle= s.getVehicleType();
                    String vehicleT=   overVehicleService.findByvehicleType(hicle);
                    s.setVehicleType(vehicleT);
                   }
                   if(StringUtils.isNotBlank(s.getEmissionStandard())){
                       String  hicl= s.getEmissionStandard();
                    String mission=   overVehicleService.findByStandard(hicl);
                    s.setEmissionStandard(mission);
                   }
                    //存入数据库
                   logger.info("2222222----"+s);
                   overVehicleService.save(s);
               });
                    return ApiResponse.ok("ok", list.size());

            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return ApiResponse.error("error");

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
糊涂工具是一个功能强大的工具类库,它为我们的开发过程提供了许多便利。其中,它提供了execl导入注解的功能,使得我们可以轻松地将数据从execl文件中导入到我们的程序中。 通过使用糊涂工具提供的注解,我们可以在实体类的属性上添加注解,定义该属性与execl文件中的列的映射关系。这样一来,我们只需要一行代码即可将execl文件中的数据与实体类对象进行绑定。 糊涂工具使用了反射机制,根据注解的配置信息,自动完成了数据导入的过程。它能够根据execl文件的列名,自动匹配到对应的实体类属性,并将数据赋值给相应的属性。同时,它还支持一些常见的数据类型转换,比如将字符串类型自动转换为整数、浮点数等类型。 除了基本的数据导入功能,糊涂工具还提供了一些额外的特性,比如数据校验、异常处理等。通过在注解中添加一些配置参数,可以实现对导入数据的校验,确保导入的数据符合预期的格式和要求。同时,它还能够对导入数据过程中出现的异常进行处理,比如数据类型转换异常、空指针异常等。 总之,糊涂工具类的execl导入注解功能能够极大地简化我们的开发工作,提高开发效率。它通过注解配置,自动完成数据导入的过程,支持数据类型转换和数据校验等功能,为我们的开发带来了许多便利。无论是小型项目还是大型项目,糊涂工具都是一个值得使用工具类库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值