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