hutool工具实现导出导入功能

发布时间 2023-08-02 08:53:25作者: 五官一体即忢

1、导出

   @RequestMapping("/export")
    public void export1(HttpServletResponse response){
        List<UserEntity> list = new ArrayList<>();
 
 
        //传入数据
        List<UserEntity> userEntityList = userService.list();
 
 
        for (UserEntity user : userEntityList) {
            UserEntity obj = new UserEntity();
            obj.setId(user.getId());
            obj.setName(user.getName());
            obj.setEmail(user.getEmail());
            obj.setMobile(user.getMobile());
            obj.setStatus (user.getStatus());
            obj.setDeptId(user.getDeptId());
            obj.setCreateBy(user.getCreateBy());
            obj.setCreateTime(user.getCreateTime());
            obj.setLastUpdateBy(user.getLastUpdateBy());
            obj.setLastUpdateTime(user.getLastUpdateTime());
            obj.setDelFlag(user.getDelFlag());
            list.add(obj);
        }
 
        // 1.创建ExcelWriter
        // 通过工具类创建writer,默认创建xls格式
        ExcelWriter writer = ExcelUtil.getWriter();
        writer.renameSheet(0, "用户记录");
        //创建工作表
        //创建xlsx格式的
        //ExcelWriter writer = ExcelUtil.getWriter(true);
 
        // 2.设置一级标题
        // 合并单元格后的标题行,使用默认标题样式,从0开始
        // 设置表头高度
        writer.setRowHeight(0, 25);
 
        // 3.设置二级标题
        writer.addHeaderAlias("id", "编号");
        writer.addHeaderAlias("name", "用户名");
        writer.addHeaderAlias("email", "邮箱");
        writer.addHeaderAlias("mobile", "手机号");
        writer.addHeaderAlias("status", "状态  0:禁用   1:正常");
        writer.addHeaderAlias("deptId", "机构ID");
        writer.addHeaderAlias("createBy", "创建人");
        writer.addHeaderAlias("createTime", "创建时间");
        writer.addHeaderAlias("lastUpdateBy", "更新人");
        writer.addHeaderAlias("lastUpdateTime", "更新时间");
        writer.addHeaderAlias("delFlag", "是否删除  -1:已删除  0:正常");
 
 
        // 4.设置表头字体
        // 获取表头样式,获取样式后可自定义样式
        CellStyle headCellStyle = writer.getHeadCellStyle();
        // 获取单元格样式
//        CellStyle cellStyle = excelWriter.getCellStyle();
        // 设置内容字体
        Font font = writer.createFont();
        // 设置字体
        font.setFontName("宋体");
        // 设置字体大小
        font.setFontHeightInPoints((short) 14);
        // 字体加粗
        font.setBold(true);
        // 字体颜色
        font.setColor(Font.SS_NONE);
        headCellStyle.setFont(font);
 
        // 5.设置单元格宽度
        int[] arr = {30, 30, 25};
        for (int i = 0; i < arr.length; i++) {
            writer.setColumnWidth(i, arr[i]);
        }
        writer.merge(list.size()-2, "员工信息表");
 
        // 只导出有别名的字段
        writer.setOnlyAlias(true);
 
        // 一次性写出内容,使用默认样式,强制输出标题
        writer.write(list, true);
 
        // 从第几行写入
//        excelWriter.setCurrentRow(1);
//        excelWriter.writeRow(data());
        // 设置某个单元格的样式
//        CellStyle orCreateCellStyle = excelWriter.getOrCreateCellStyle(0, 1);
        // 设置某行的样式
//        excelWriter.setRowStyle();
        ServletOutputStream out = null;
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            String fileName = URLEncoder.encode(dateFormat.format(new Date())+"用户信息表" , StandardCharsets.UTF_8.name());
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
            out = response.getOutputStream();
            // 将Excel Workbook刷出到输出流
            writer.flush(out, true);
 
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("文件写入失败!");
        } finally {
            // 记住关流
            IoUtil.close(writer);
 
            IoUtil.close(out);
        }
    }

2、导入

 /**
     * 专家信息导入
     * @return
     */
    @RequestMapping("/ImportExpert")
    public ActionResult ImportExpert(@RequestParam("file") MultipartFile file){
        SsSysDepartment sysDepartment = UserInfo.getSysDepartment();
        // 1.获取上传文件输入流
        InputStream inputStream = null;
        ExcelReader excelReader = null;
        try {

            if (file.isEmpty()) {
                return  apiErrorReturn("文件为空!");
            }
            inputStream = file.getInputStream();
            //调用hutool方法读取数据,默认调用第一个sheet
            excelReader = ExcelUtil.getReader(inputStream);
            // 从第二行开始获取数据,excelReader.read的结果是一个两维的list,外层是行,内层是行对应的所有列
            List<List<Object>> read = excelReader.read(1, excelReader.getRowCount());


// 循环获取的数据
for (int i = 0; i < read.size(); i++) {
try {

//region 取出变量
List list =read.get(i);
String name = list.get(0).toString();//姓名
String czd = list.get(1).toString();//常驻地
String zjlx_1 = list.get(2).toString();//专家类型1
String pspm_1 = list.get(3).toString();//专家类型1评审品目
String djlx_1 = list.get(4).toString();//专家类型1来源
String zjlx_2 = list.get(5).toString();//专家类型2
String pspm_2 = list.get(6).toString();//专家类型2评审品目
String djlx_2 = list.get(7).toString();//专家类型2来源
String phone = AesEncryptHelper.AesEncryptSingle(list.get(8).toString(),AesSecrect);;//手机号码
String iscq = list.get(9).toString();//是否可抽取
String ishmd = list.get(10).toString();//是否黑名单,0-否,1-是
String sex = list.get(11).toString();//性别
String idcardtype = list.get(12).toString();//证件类型
String idcard = list.get(13).toString();//证件号码
String zzqk = list.get(14).toString();//在职情况
String company = list.get(15).toString();//工作单位
String aviodunit = list.get(16).toString();//需要回避的其他单位
String zczy = list.get(17).toString();//职称专业
String zclevel = list.get(18).toString();//职称级别
String zcdate = list.get(19).toString();//职称有效期


....dosoming

} catch (Exception e) {
}

}
if(StringUtils.isNotEmpty(errorMsg)){
                return apiErrorReturn(errorMsg);
            }
            return apiSuccessReturn("导入成功!");
        } catch (Exception e) {
            e.printStackTrace();
            log.error("专家信息导入失败:{}",e.getMessage());
        }finally {
            try {
                if(inputStream!=null){
                    inputStream.close();

                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(excelReader!=null){
                excelReader.close();
            }
        }
        return  apiErrorReturn("专家信息导入失败");
    }