【EasyExcel-Alibaba】在Java中操作Excel 完成数据的导入导出

快速入门

引入依赖

构建实体类

数据导出

参数

WriteWorkbook

WriteSheet

WriteTable

测试

数据导入

测试


        EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。

GitHub地址:GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具

快速入门

引入依赖

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

构建实体类

@Data //为实体类提供set、get方法
public class User {
    //此注解用于Excel的表头
    @ExcelProperty("用户姓名")
    private String username;

    @ExcelProperty("用户性别")
    private String sex;

    @ExcelProperty("用户年龄")
    private Integer age;

    //此注解会在数据导出之后忽略该字段
    @ExcelIgnore
    private String address;
}

数据导出

参数

  • WriteWorkbook 可以理解成一个excel
  • WriteSheet 理解成一个excel里面的一个表单
  • WriteTable 一个表单里面如果有多个实际用的表格,则可以用WriteTable

这是三个参数都有的通用参数,如果这些均为空,那么默认使用上级。

名称默认值描述
converter默认加载了很多转换器,这里可以加入不支持的字段
writeHandler写的处理器。可以实现WorkbookWriteHandler,SheetWriteHandler,RowWriteHandler,CellWriteHandler,在写入excel的不同阶段会调用
relativeHeadRowIndex0写入到excel和上面空开几行
headclazz二选一。读取文件头对应的列表,会根据列表匹配数据,建议使用class
clazzhead二选一。读取文件的头对应的class,也可以使用注解。如果两个都不指定,则会读取全部数据
autoTrimtrue会对头、读取数据等进行自动trim
use1904windowingfalseexcel中时间是存储1900年起的一个双精度浮点数,但是有时候默认开始日期是1904,所以设置这个值改成默认1904年开始
useScientificFormatfalse数字转文本的时候在较大的数值的是否是否采用科学计数法
needHeadtrue是否需要写入头到excel
useDefaultStyletrue是否使用默认的样式
automaticMergeHeadtrue自动合并头,头中相同的字段上下左右都会去尝试匹配
excludeColumnIndexes需要排除对象中的index的数据
excludeColumnFieldNames需要排除对象中的字段的数据
includeColumnIndexes只要导出对象中的index的数据
includeColumnFieldNames只要导出对象中的字段的数据

WriteWorkbook

EasyExcel.write(fileName, User.class)
         //在write方法之后,在 sheet方法之前都是设置WriteWorkbook的参数
         .sheet("模板")
         .doWrite(传入的数据);

WriteSheet

EasyExcel.write(fileName, User.class)
         .sheet("模板")
         //在sheet方法之后,在 doWrite方法之前都是设置WriteSheet的参数
         .doWrite(传入的数据);

WriteTable

EasyExcel.write(fileName, User.class)
         .sheet("模板")
         .table()
         //在table方法之后,在 sheet方法之前都是设置WriteTable的参数
         .doWrite(传入的数据);

​

测试

public class TestWrite {
    public static void main(String[] args) {
        String fileName = "C:\\Users\\Administrator\\Desktop\\EasyExcel\\用户信息.xlsx";
        //创建一个集合放入用户信息
        List<User> list = new ArrayList<>();
        list.add(new User("张三","男",18,"福建省"));
        list.add(new User("李四","女",17,"浙江省"));
        list.add(new User("王五","男",22,"江西省"));
        list.add(new User("赵六","男",19,"江苏省"));
        list.add(new User("小七","女",20,"广东省"));
        //这里用到了EasyExcel的写功能
        //write传入文件导出位置以及写入信息的字节码文件
        //sheet传入模板内容
        //doWrite用于将传入的数据进行分页查询
        EasyExcel.write(fileName, User.class).sheet("UserTable").doWrite(list);
    }
}

数据导入

public class TestRead {
    public static void main(String[] args) {
        String fileName = "C:\\Users\\Administrator\\Desktop\\EasyExcel\\用户信息.xlsx";
        EasyExcel.read(fileName, User.class,new ExcelListener())
                 .sheet()
                 //doRead()方法用于关闭读取流
                 .doRead();
    }
}

public class ExcelListener extends AnalysisEventListener<User> {

    /**
     * 一行一行读取Excel内容,从第二行开始读取
     * @param user
     * @param analysisContext
     */
    @Override
    public void invoke(User user, AnalysisContext analysisContext) {
        System.out.println(user);
    }

    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头信息" + headMap);
    }

    /**
     * 读取完Excel后执行
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("读取完Excel后执行");
    }
}

测试

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里是SpringBoot+Mybatis-plus整合easyExcel批量导入Excel数据库+导出Excel的方法。 1. 添加依赖 在 pom.xml 文件添加以下依赖: ```xml <!-- easyExcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> ``` 2. 创建实体类 创建一个实体类,用于映射 Excel 表格数据。 ```java @Data public class User { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private Integer age; @ExcelProperty("性别") private String gender; } ``` 3. 创建Excel读取器 创建一个 Excel 读取器,用于读取 Excel 表格数据,并将数据存储到数据。 ```java @Component public class ExcelReader { @Autowired private UserService userService; /** * 读取 Excel 表格数据,并将数据存储到数据 */ public void readExcel(String fileName) { EasyExcel.read(fileName, User.class, new UserExcelListener()).sheet().doRead(); } /** * 用户Excel监听器 */ private class UserExcelListener extends AnalysisEventListener<User> { /** * 每读取一行数据,就会调用该方法 */ @Override public void invoke(User user, AnalysisContext context) { userService.save(user); } /** * 读取完整个 Excel 表格后,会调用该方法 */ @Override public void doAfterAllAnalysed(AnalysisContext context) { // do nothing } } } ``` 4. 创建Excel导出器 创建一个 Excel 导出器,用于从数据获取数据,并将数据导出Excel 表格。 ```java @Component public class ExcelWriter { @Autowired private UserService userService; /** * 将用户数据导出Excel 表格 */ public void writeExcel(String fileName) { List<User> userList = userService.list(); EasyExcel.write(fileName, User.class).sheet().doWrite(userList); } } ``` 5. 创建Controller 创建一个 Controller,用于接收前端请求,并调用相应的方法处理请求。 ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private ExcelReader excelReader; @Autowired private ExcelWriter excelWriter; /** * 批量导入用户数据 */ @PostMapping("/import") public void importExcel(@RequestParam("file") MultipartFile file) throws IOException { excelReader.readExcel(file.getInputStream()); } /** * 导出用户数据Excel */ @GetMapping("/export") public void exportExcel(HttpServletResponse response) throws IOException { String fileName = "用户信息.xlsx"; response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); response.setContentType("application/vnd.ms-excel"); excelWriter.writeExcel(response.getOutputStream()); } } ``` 6. 配置文件 在 application.yml 文件添加数据库连接信息。 ```yaml spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root mybatis-plus: mapper-locations: classpath:/mapper/*.xml type-aliases-package: com.example.demo.domain ``` 7. 测试 启动应用程序,并在浏览器访问以下地址: - http://localhost:8080/user/export :导出 Excel 表格 - http://localhost:8080/user/import :导入 Excel 表格 以上就是 SpringBoot+Mybatis-plus整合easyExcel批量导入Excel数据库+导出Excel 的方法了,希望能帮到你。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值