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

本文介绍了如何使用阿里巴巴的EasyExcel库进行Excel读写操作,并结合Spring JPA实现了从数据库读取数据写入Excel及从Excel读取数据更新数据库的功能。重点讲解了User实体类配置、监听器实现和JPA操作的应用。

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);
    }

<think> 我们正在处理关于EasyExcel示例代码的查询。根据提供的引用,我们可以总结出几个关键点: 1. 引用[1]和[3]都提到了读取和入Excel的示例代码,其中引用[3]提供了更完整的入和读取示例(尽管读取部分没有给出具体代码,但提到了读操作)。 2. 引用[2]提到了多列表组合填充的复杂Excel生成,并指向官方文档。 用户明确要求查找EasyExcel的示例代码,因此我们将重点放在提供读取和入的简单示例上,并引导用户到官方资源获取更复杂的示例。 根据引用[3],我们看到一个入Excel的示例代码: ```java public class TestDemo { public static void main(String[] args) { List<CondUser> list = new ArrayList<CondUser>(); for (int i = 0; i < 10; i++) { CondUser condUser = new CondUser(); condUser.setId(Long.valueOf(i+1)); condUser.setName(String.valueOf(i+1)); condUser.setAge(i+1); list.add(condUser); } EasyExcel.write("F:\\2\\qyc.xlsx", CondUser.class).sheet("客户").doWrite(list); } } ``` 注意:这里使用EasyExcel入功能,将列表数据入到指定路径的Excel文件中。 对于读取操作,引用[1]和[3]都提到了读取,但没有给出具体代码。我们可以补充一个简单的读取示例(参考EasyExcel常见用法): ```java // 读取示例 public class ReadDemo { public static void main(String[] args) { String fileName = "F:\\2\\qyc.xlsx"; // 这里需要自定义监听器 EasyExcel.read(fileName, CondUser.class, new PageReadListener<CondUser>(dataList -> { for (CondUser user : dataList) { System.out.println(user); } })).sheet().doRead(); } } ``` 另外,引用[2]提到多列表组合填充,这是更高级的用法,我们可以提供官方文档链接,并简要说明。 因此,回答结构如下: 1. 引入:说明EasyExcel是阿里巴巴开源的Excel操作工具,简单易用。 2. 入示例:给出
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值