EasyExcel导入、导出Excel
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyExcel导入、导出Excel相关的知识,希望对你有一定的参考价值。
参考技术A EasyExcel支持对实体类中的属性进行注解,方便后续进行读写操作。id 为 表头,index 代表的是 第0行
@ExcelProperty(value="id",index=0)
实测:导出用时105秒左右
每个表10万条
参考:
https://www.yuque.com/easyexcel/doc/easyexcel
https://alibaba-easyexcel.github.io/
https://www.freesion.com/article/65771115640/
https://www.cnblogs.com/math-and-it/p/15465848.html
https://blog.51cto.com/alex4dream/4112300
Java+EasyExcel实现文件导入导出
Java+EasyExcel实现文件导入导出
引言
项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息,导出员工信息,手动输入比较繁琐,所以本篇博文教大家如何在Java中导入Excel文件与导出Excel文件
技术栈Excel工具:EasyExcel选用框架:Spring、Spring MVC、MyBatis(SSM)项目构建管理工具:Maven需求:
- 要求利用excel工具实现员工信息的导入与导出
- 导出要求为输出到指定位置并下载
- 导入文件导入后,存入数据库,并显示在页面
- 导出文件,点击导出后写入指定地址,并下载该文件
效果图
项目结构
核心源码
导入阿里巴巴EasyExcel依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
这里采用EasyExcel,为什么不采用POI呢?
因为EasyExcel是对POI做的一个升级,POI相对于笨重,EasyExcel去除了一些POI比较繁琐的东西,所以EasyExcel比较轻量级,所以本文采用EasyExcel
EasyExcel是阿里巴巴的产品,POI是Apache基金会的开源产品,EasyExcel对POI做了一个升级
核心实体类
package com.wanshi.spring.entity;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
public class Employee
private String noid;
(20)
("员工姓名")
private String emp_name;
(20)
("员工年龄")
private Integer emp_age;
private Integer emp_sex;
//冗余字段
(20)
("员工性别")
private String str_emp_sex;
(20)
("员工工资")
private Double emp_salary;
(20)
("员工住址")
private String emp_address;
(20)
("员工岗位")
private String emp_position;
//分页相关,当前页与每页的数据条数
private Integer pageNum;
private Integer pageSize;
核心监听器类
EmployeeListener类:
package com.wanshi.spring.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.wanshi.spring.entity.Employee;
import java.util.ArrayList;
import java.util.List;
public class EmployeeReadListener extends AnalysisEventListener<Employee>
//员工集合
private static List<Employee> employeeList = new ArrayList<>();
// 每读一样,会调用该invoke方法一次
public void invoke(Employee data, AnalysisContext context)
employeeList.add(data);
System.out.println("解析到一条数据:" + data);
// 全部读完之后,会调用该方法
public void doAfterAllAnalysed(AnalysisContext context)
System.out.println("全部解析完成");
/**
* 返回读取到的员工集合
* @return
*/
public static List<Employee> getStudentList()
return employeeList;
EasyExcel导入文件
Test测试类实现文件导入并存入数据库
public void test1()
ExcelReaderBuilder workBook = EasyExcel.read
("C:\\\\Users\\\\王会称\\\\Desktop\\\\员工.xlsx", Employee.class, new EmployeeReadListener());
// 封装工作表
ExcelReaderSheetBuilder sheet1 = workBook.sheet();
// 读取
sheet1.doRead();
//写入数据库
List<Employee> studentList = EmployeeReadListener.getStudentList();
for (Employee employee : studentList)
employee.setNoid(PbSecretUtils.uuid());
employeeMapper.insert(employee);
通过页面点击导入文件并存入数据库
EmployeeController类:
"/import_employee_excel")(
public String importEmployeeExcel(MultipartFile emp_excel)
employeeService.importExcel(emp_excel);
return "redirect:/employee/list";
EmployeeService类:
/**
* 获取用户选择的文件并将文件存入指定位置再将数据存入数据库
* @param emp_excel
* @return
*/
public Integer importExcel(MultipartFile emp_excel)
try
String fileName = FileUploadUtil.upload(emp_excel, "");
ExcelReaderBuilder workBook = EasyExcel.read
(GlobalSet.upload_url+fileName, Employee.class, new EmployeeReadListener());
// 封装工作表
ExcelReaderSheetBuilder sheet1 = workBook.sheet();
// 读取
sheet1.doRead();
List<Employee> studentList = EmployeeReadListener.getStudentList();
Java+EasyExcel实现文件导入导出Java+EasyExcel实现文件导入导出,导入导出如此简单