[会写代码的健身爱好者成长史]之EasyExcel使用Demo

1.添加依赖

         <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>easyexcel</artifactId>
              <version>2.1.1</version>
        </dependency>

        <!--xls-->
        <dependency>
              <groupId>org.apache.poi</groupId>
              <artifactId>poi</artifactId>
              <version>3.17</version>
        </dependency>
        <dependency>
              <groupId>org.apache.poi</groupId>
              <artifactId>poi-ooxml</artifactId>
              <version>3.17</version>
        </dependency>

 2.User实体类

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name="t_user")
@Entity
public class User {
    //value是代表excel开头,index是进行excel读取操作的时候,excel表头的坐标
    @ExcelProperty(value = "编号",index = 0)
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)//主键生成策略
    private Integer id;
    @ExcelProperty(value = "姓名",index = 1)
    public  String name;
    @ExcelProperty(value = "年龄",index = 2)
    private Integer age;
    @ExcelProperty(value = "地址",index = 3)
    private String address;

}

3.读取操作需要写个监听器


import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.redis.test.User;

import java.util.Map;

/**
 * 分析事件侦听器
 */
public class ExcelListener extends AnalysisEventListener<User> {
    /**
     *  一行一行读取Excel内容   第一行是标头不会读取
     * @param user
     * @param analysisContext
     */
    @Override
    public void invoke(User user, AnalysisContext analysisContext) {
  		System.out.println("行内容为----->"+user);
    }

    /**
     * 读取表头中的内容
     * @param headMap
     * @param context
     */
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头:"+headMap);
        super.invokeHeadMap(headMap, context);
    }

    /**
     * 读取完成后做什么操作
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }

 4.写个测试类

    public static void main(String[] args) {

        String fileNameURL = "C:\\Users\\c'q\\Desktop\\java-excel.xlsx";
        //写入操作
        EasyExcel.write(fileNameURL,User.class).sheet("学生列表").doWrite(test());
        //将excel里面的文本读取出来
        EasyExcel.read(fileNameURL,User.class,new ExcelListener()).sheet().doRead();

    }

    public static List<User> test(){
        List<User> objects = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            objects.add(new User(1+i,"张三"+i,18+i,"江苏省"+i));
        }
        return objects;
    }

5.输出结果

        写入excel

         读取excel

6.进阶版

通过jpa查询数据库的数据,将数据库里面的数据写入到excel表格中

    public List<User> getGroup() {
        List<User> all = userRepository.findAll();
        log.info("all is {}",all);
        EasyExcel.write(fileNameURL,User.class).sheet("abc").doWrite(all);
        return all;
    }

将excel表格的数据,读取添加到数据库中

    public void getShuJUKu(){
        // 接收解析出的目标对象(Student)
        List<User> user = new ArrayList<>();

        // 这里需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
        // excel中表的列要与对象的字段相对应
        EasyExcel.read(fileNameURL, User.class, new AnalysisEventListener<User>() {

            // 每解析一条数据都会调用该方法
            @Override
            public void invoke(User student, AnalysisContext analysisContext) {
                System.out.println("解析一条Student对象:" + JSON.toJSONString(student));
                user.add(student);
            }

            // 解析完毕的回调方法
            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                System.out.println("excel文件读取完毕!");
            }
        }).sheet().doRead();
        //jpa添加方法,saveAll方法可以直接将list集合里面的user对象,全部添加到数据库中
        userRepository.saveAll(user);
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值