• 使用EasyExcel导入用户数据


    导入依赖包
    ```java
    compile 'com.alibaba:easyexcel:2.2.6'
    ```
    代码(依赖于springboot)
    提供数据导入接口
    ```java
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Date;
    import java.util.List;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.io.IOUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.MediaType;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    import com.alibaba.excel.EasyExcel;


    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;

    @Api(value="用户导入相关接口",tags= {"UserImport API"})
    @RestController
    @RequestMapping("/api/uc/import")
    public class UcImportRs {

    public static Logger logger = LoggerFactory.getLogger(UcImportRs.class);

    String path;

    @Autowired(required=false)
    UcService _ucService;

    /**
    * 文件上传类
    * 文件会自动绑定到MultipartFile中
    * @param request 获取请求信息
    * @param description 文件描述
    * @param file 上传的文件
    * @return 上传成功或失败结果
    * @throws IOException
    * @throws IllegalStateException
    */
    @ApiOperation(value="excel文件上传")
    @RequestMapping(value = "/uploadExcel",method = {RequestMethod.POST})
    public String upload(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws IllegalStateException, IOException {

    // 测试MultipartFile接口的各个方法
    System.out.println("文件类型ContentType=" + file.getContentType());
    System.out.println("文件组件名称Name=" + file.getName());
    System.out.println("文件原名称OriginalFileName=" + file.getOriginalFilename());
    System.out.println("文件大小Size=" + file.getSize()/1024 + "KB");

    // 如果文件不为空,写入上传路径,进行文件上传
    if (!file.isEmpty()) {

    //String restult = importUc(file.getInputStream());

    // 构建上传文件的存放路径
    System.out.println("path = " + path);

    // 获取上传的文件名称,并结合存放路径,构建新的文件名称
    String filename = file.getOriginalFilename();
    File filepath = new File(path, filename);

    // 判断路径是否存在,不存在则新创建一个
    if (!filepath.getParentFile().exists()) {
    filepath.getParentFile().mkdirs();
    }

    // 将上传文件保存到目标文件目录
    file.transferTo(new File(path + File.separator + filename));

    logger.debug("文件上传成功:路径:{},开始导入用户",filepath.getAbsolutePath());
    String result = importUc(filepath);
    return result;
    } else {
    return "error";
    }
    }

    //导入用户
    public String importUc(InputStream in) {
    UserDataListener listener = new UserDataListener();
    EasyExcel.read(in, UserData.class,listener).sheet().doRead();
    List<UserData> datas = listener.getDatas();
    return _ucService.addUc(datas);
    }


    //导入用户
    public String importUc(File filepath) {
    UserDataListener listener = new UserDataListener();
    EasyExcel.read(filepath.getAbsolutePath(), UserData.class,listener).sheet().doRead();
    List<UserData> datas = listener.getDatas();
    return _ucService.addUc(datas);
    }

    @ApiOperation(value="获取用户信息导入模板")
    @RequestMapping(value = "/getExcelTemplate",method = {RequestMethod.GET})
    public void download( HttpServletRequest request, HttpServletResponse response) throws Exception {
    try (
    InputStream inputStream = new FileInputStream(new File("./config/用户信息导入表.xlsx"));
    OutputStream outputStream = response.getOutputStream();
    )
    {
    String fileName = java.net.URLEncoder.encode("用户信息导入表.xlsx", "UTF8");
    response.setCharacterEncoding("UTF-8");
    response.setContentType("application/x-download;charset=utf8");
    response.addHeader("Content-Disposition", "attachment;filename="+fileName);

    IOUtils.copy(inputStream, outputStream);
    outputStream.flush();
    }
    }

    public ResponseEntity<FileSystemResource> getExcelTemplate() throws Throwable {
    File file = new File("./config/用户信息导入表.xlsx");
    return export(file);
    }

    public ResponseEntity<FileSystemResource> export(File file) {
    if (file == null) {
    return null;
    }
    HttpHeaders headers = new HttpHeaders();
    headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
    headers.add("Content-Disposition", "attachment; filename=用户信息导入模板.xlsx");
    headers.add("Pragma", "no-cache");
    headers.add("Expires", "0");
    headers.add("Last-Modified", new Date().toString());
    headers.add("ETag", String.valueOf(System.currentTimeMillis()));

    return ResponseEntity
    .ok()
    .headers(headers)
    .contentLength(file.length())
    .contentType(MediaType.parseMediaType("application/octet-stream"))
    .body(new FileSystemResource(file));
    }

    }


    ```
    监听类:

    ```css
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    import com.alibaba.dubbo.common.json.JSON;
    import com.alibaba.excel.context.AnalysisContext;
    import com.alibaba.excel.event.AnalysisEventListener;
    import com.alibaba.excel.metadata.CellExtra;


    public class UserDataListener extends AnalysisEventListener<UserData> {

    public static Logger LOGGER = LoggerFactory.getLogger(UserDataListener.class);

    private List<UserData> datas = new ArrayList<>();

    public List<UserData> getDatas() {
    return datas;
    }

    public void setDatas(List<UserData> datas) {
    this.datas = datas;
    }

    @Override
    public void invoke(UserData data, AnalysisContext context) {
    //当前行
    LOGGER.debug("扫描到用户:{}",data.getUserName());
    if (data != null) {
    datas.add(data);
    }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
    System.out.println("解析结束");
    }

    /**
    * 这里会一行行的返回头
    *
    * @param headMap
    * @param context
    */
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
    /*try {
    System.out.println("解析到一条头数据:{}" + JSON.json(headMap));
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }*/
    }

    @Override
    public void extra(CellExtra extra, AnalysisContext context) {
    try {
    System.out.println("读取到了一条额外信息:{}"+ JSON.json(extra));
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    switch (extra.getType()) {
    case COMMENT:
    LOGGER.info("额外信息是批注,在rowIndex:{},columnIndex;{},内容是:{}", extra.getRowIndex(), extra.getColumnIndex(),
    extra.getText());
    break;
    case HYPERLINK:
    if ("Sheet1!A1".equals(extra.getText())) {
    LOGGER.info("额外信息是超链接,在rowIndex:{},columnIndex;{},内容是:{}", extra.getRowIndex(), extra.getColumnIndex(),
    extra.getText());
    } else if ("Sheet2!A1".equals(extra.getText())) {
    LOGGER.info(
    "额外信息是超链接,而且覆盖了一个区间,在firstRowIndex:{},firstColumnIndex;{},lastRowIndex:{},lastColumnIndex:{},"
    + "内容是:{}",
    extra.getFirstRowIndex(), extra.getFirstColumnIndex(), extra.getLastRowIndex(),
    extra.getLastColumnIndex(), extra.getText());
    } else {

    }
    break;
    case MERGE:
    LOGGER.info("额外信息是合并单元格,而且覆盖了一个区间,在firstRowIndex:{},firstColumnIndex;{},lastRowIndex:{},lastColumnIndex:{}",
    extra.getFirstRowIndex(), extra.getFirstColumnIndex(), extra.getLastRowIndex(),
    extra.getLastColumnIndex());
    break;
    default:
    }
    }

    }

    ```
    模型:

    ```java
    import com.alibaba.excel.annotation.ExcelIgnore;
    import com.alibaba.excel.annotation.ExcelProperty;

    public class UserData {
    @ExcelProperty("一级部门")
    private String depatment1Name;
    @ExcelProperty("二级部门")
    private String depatment2Name;
    @ExcelProperty("用户名")
    private String userName;
    @ExcelProperty("用户ID")
    private String userId;
    @ExcelProperty("电话")
    private String telphone;
    }
    ```
    userService:
    ```java
    @Component
    public class UcService {

    public String addUc(List<UserData> datas) {
    //do something
    }

    }
    ```
    以上!

  • 相关阅读:
    mysql基础(三)
    mysql基础(二)
    Mysql基础(一)
    Less32-Less-33
    Less-27
    Less-26
    Less-25
    Less-23
    Less18-Less19
    Less13-Less-14
  • 原文地址:https://www.cnblogs.com/liangblog/p/13914795.html
Copyright © 2020-2023  润新知