IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> EasyExcel导入导出操作 -> 正文阅读

[网络协议]EasyExcel导入导出操作

?实体类

@Data
@Builder
@HeadRowHeight(100)
public class EmpExcel {
    @ExcelProperty("人员编号")
    private String empCode;
    @ExcelProperty("姓名")
    private String empName;
    @ExcelProperty("定位卡号")
    private String idCard;
    @ExcelProperty("性别")
    private String gender;

    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
    @JSONField(format="yyyy-MM-dd")
    @DateTimeFormat("yyyy-MM-dd")
    @ExcelProperty("生日")
    private java.util.Date birth;
    @ExcelProperty("政治面貌")
    private String politicCountenance;
    @ExcelProperty("学历")
    private String education;
    @ExcelProperty("婚姻状况")
    private String maritalStatus;
    @ExcelProperty("手机号")
    private String mobile;
    @ExcelProperty("部门名称")
    private String deptName;
    @ExcelProperty("班次名称")
    private String className;
    @ExcelProperty("岗位名称")
    private String postName;
    @ExcelProperty("职务名称")
    private String dutyName;
    @ExcelProperty("企业卡号")
    private String enterpriseCardno;
    @ExcelProperty("连接卡号")
    private String connnetCardno;
    @ExcelProperty("工种")
    private String empType;
    @ExcelProperty("工作许可证")
    private String workLicense;

    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
    @JSONField(format="yyyy-MM-dd")
    @DateTimeFormat("yyyy-MM-dd")
    private java.util.Date workLicenseEffectiveData;
    @ColumnWidth(18)
    private URL photo;

    @TableField(fill = FieldFill.INSERT)
    @ExcelProperty("创建时间")
    private Date createTime;
    @ExcelProperty("pid")
    private String pid;
    @ExcelProperty("是否管理员")
    private String isAdmin;
}

?导出:包括图片导出,以及失败后返回json

 @Autowired
    EmpService empService;
    @Autowired
    WorkPlanService workPlanService;
    @Value("${minio.url}")
    String path;
    @RequestMapping(value = "/emp/download",method = RequestMethod.GET)
    public void downloadExcel(HttpServletResponse response) throws IOException {
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmm");

            List<CmemEmp> list = empService.list(new QueryWrapper<>());
            List<EmpExcel> empExcelList = new ArrayList<>();
            for (CmemEmp emp : list) {
                EmpExcel empExcel = EmpExcel.builder()
                        .empCode(emp.getEmpCode())
                        .empName(emp.getEmpName())
                        .idCard(emp.getIdCard())
                        .gender(emp.getGender().equals(1) ? "男" : "女")
                        //.birth(emp.getBirth())
                        //.politicCountenance(emp.getPoliticCountenance())
                        .mobile(emp.getMobile())
                        //.deptName(emp.getDeptName())
                        //.className(emp.getClassName())
                        // .postName(emp.getPostName())
                        //.dutyName(emp.getDutyName())
                        .enterpriseCardno(emp.getEnterpriseCardno())
                        .connnetCardno(emp.getConnnetCardno())
                        // .empType(emp.getEmpType())
                        // .workLicense(emp.getWorkLicense())
                        //.workLicenseEffectiveData(emp.getWorkLicenseEffectiveData())
                        // .photo(new URL(path+"/"+emp.getPhoto()))
                        .pid(System.currentTimeMillis() + "")
                        .createTime(new Date())
                        .isAdmin(emp.getIsAdmin() + "").build();

                empExcelList.add(empExcel);
            }
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            String fileName = format.format(new Date()) + URLEncoder.encode("档案数据", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

            EasyExcel.write(response.getOutputStream(), EmpExcel.class).sheet("模板").doWrite(empExcelList);
        } catch (Exception e) {
            // 重置response
            response.reset();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            Map<String, String> map = new HashMap<String, String>();
            map.put("status", "failure");
            map.put("message", "下载文件失败" + e.getMessage());
            response.getWriter().println(JSON.toJSONString(map));
        }
    }

导入:需要new 监听器时,将DAO 或者Service传入,否则会空指针,楼主亲测

package com.jylink.cmem.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.jylink.cmem.entity.CmemEmp;
import com.jylink.cmem.service.EmpService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;

// 有个很重要的点 OrderDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
public class EmpDataListener extends AnalysisEventListener<CmemEmp> {
    private static final Logger LOGGER = LoggerFactory.getLogger(EmpDataListener.class);

    private static final int BATCH_COUNT = 5;
    List<CmemEmp> list = new ArrayList<>();
   public Map<String,String> map = new HashMap<>();

    private EmpService empService;


    public EmpDataListener(EmpService empService) {
        this.empService = empService;
    }
    public EmpDataListener(){

    }

    @Override
    public void invoke(CmemEmp data, AnalysisContext context) {
        LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data));
        if(data.getEmpCode()==null || data.getEmpCode()==""){
            map.put("code","400");
            map.put("msg","表中有未填写的人员编号");
            return;
        }
        if(data.getEmpName().length()>30){
            map.put("code","400");
            map.put("msg","人员姓名值过多");
            return;
        }
        if(data.getIdCard().length()>18){
            map.put("code","400");
            map.put("msg","卡号值过多");
            return;
        }
        if(!"1".equals(data.getGender())&&!"0".equals(data.getGender())&&data.getGender()!=null){
            map.put("code","400");
            map.put("msg","性别格式有误,请参照以下格式 男:1   女:0");
            return;
        }
        if (data.getMobile() ==null || data.getMobile()=="" ){
            map.put("code","400");
            map.put("msg","表中有未填写的手机号");
            return;
        }if(data.getIsAdmin()==null || data.getMobile()==""){
            map.put("code","400");
            map.put("msg","是否管理员未填写");
            return;
        }
        data.setPid(System.currentTimeMillis());
        data.setCreateTime(new Date());
        list.add(data);
        // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
        if (list.size() >= BATCH_COUNT) {
            saveData();
            // 存储完成清理 list
            list.clear();
        }
    }


    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // 这里也要保存数据,确保最后遗留的数据也存储到数据库
        saveData();
        LOGGER.info("所有数据解析完成!");
    }

    /**
     * 加上存储数据库
     */
    private void saveData() {
        LOGGER.info("{}条数据,开始存储数据库!", list.size());
        empService.saveBatch(list);
        LOGGER.info("存储数据库成功!");
    }
}

Crotroller:

  @PostMapping("/emp/upload")
    @ResponseBody
    public JSONObject empUpload(MultipartFile file) throws IOException {
        JSONObject jsonObject = new JSONObject();
        EmpDataListener empDataListener = new EmpDataListener(empService);
        EasyExcel.read(file.getInputStream(), CmemEmp.class, empDataListener).sheet().doRead();
        Map<String, String> map = empDataListener.map;
        try{
        if (map.size()!=0){
            jsonObject.put("code",map.get("code"));
            jsonObject.put("msg",map.get("msg"));
            return jsonObject;
        }
        }catch (Exception e){
            e.printStackTrace();
        }
        jsonObject.put("code",200);
        jsonObject.put("msg","导入成功");
        return jsonObject;
    }

导入导出都完成了,楼主小白,欢迎讨论

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:23:21  更:2021-09-05 11:24:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:23:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码