首页 > 编程语言 >Java使用EasyExcel实现对excel文件的读写

Java使用EasyExcel实现对excel文件的读写

时间:2024-03-26 17:05:24浏览次数:39  
标签:03 goods 15 19 EasyExcel excel 2024 46 Java

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

在学习Java中难免会有对文件的读写操作,像word文档、pdf文件以及excel表。这些读写操作都大差不差,接下来为大家讲解一下Java对excel表的读写操作。


提示:以下是本篇文章正文内容,下面案例可供参考

一、EasyExcel是什么?

EasyExcel是阿里巴巴开源的一款基于Java语言的简单、高效、功能强大的Excel读写工具库。它提供了简单易用的API,可以帮助Java开发者在项目中轻松地进行Excel文件的读写操作,支持读取和写入Excel文件,同时支持常见的Excel格式,如.xls和.xlsx。

EasyExcel具有以下主要特点:

  1. 简单易用:EasyExcel提供了简洁清晰的API,使得开发者可以轻松地进行Excel文件的读写操作,无需过多的复杂配置。
  2. 高效性能:EasyExcel采用了基于流的方式进行Excel文件的读写,同时使用了缓冲区等技术来提升读写效率,具有较高的性能。
  3. 功能强大:EasyExcel支持对Excel文件进行灵活的读写操作,可以读取Excel文件中的数据并转换为Java对象,也可以将Java对象的数据写入到Excel文件中。
  4. 跨平台兼容性:EasyExcel是基于Java语言开发的,可以在各种操作系统上运行,且支持读写各种常见的Excel格式,如.xls和.xlsx等。
  5. 可扩展性:EasyExcel提供了丰富的扩展点和接口,开发者可以根据自己的需求进行定制和扩展,满足不同场景下的需求。

总的来说,EasyExcel是一款功能强大且易于使用的Java Excel处理工具库,被广泛应用于各种Java项目中,特别是对Excel文件读写操作比较频繁的业务场景。

官方文档地址EasyExcel

二、使用步骤

1.引入库

我们创建maven项目,在pom.xml文件中添加依赖:

       <!--easy excel依赖-->
       <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.3.4</version>
        </dependency>

        <!--lombok依赖  用来生成getter/setter/构造函数的-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
        </dependency>

2.创建实体类

代码如下(示例):

@Data   //提供getter/setter
@NoArgsConstructor  //无参构造
@AllArgsConstructor  //含有全部参数的构造
public class Goods {

    @ExcelIgnore   //easyexcel注解 表示读写excel表忽略此列
    int id;

    @ExcelProperty("编码")   //easyexcel注解 表示读写excel表对列名为“编码”进行读写
    String code;

    @ExcelProperty("名称")
    String name;

    @ExcelProperty("价格")
    double price;

    @ExcelProperty("库存")
    int num;

    @ExcelProperty("重量")
    double weight;

    @ExcelProperty("cpu")
    String cpu;

    @ExcelProperty("内存")
    String memory;

    @ExcelProperty("机身内存")
    String bodyMemory;

    @ExcelIgnore
    String createTime;

    @ExcelIgnore
    String updateTime;

    @ExcelIgnore
    String categoryCode;
}

3建立数据库

因为我们在读写操作时需要有一定的数据源才能把读写操作更加明显。

/*
 Navicat Premium Data Transfer

 Source Server         : RpWn
 Source Server Type    : MySQL
 Source Server Version : 50735 (5.7.35)
 Source Host           : localhost:3306
 Source Schema         : demo

 Target Server Type    : MySQL
 Target Server Version : 50735 (5.7.35)
 File Encoding         : 65001

 Date: 26/03/2024 16:39:43
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for goods
-- ----------------------------
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `price` decimal(10, 2) NULL DEFAULT NULL,
  `num` int(11) NULL DEFAULT 0,
  `weight` decimal(10, 2) NULL DEFAULT NULL,
  `cpu` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `memory` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `bodyMemory` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `isdel` bit(1) NULL DEFAULT b'0',
  `categoryCode` varchar(7) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 297 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of goods
-- ----------------------------
INSERT INTO `goods` VALUES (10, '8JxeXVKZkP', '11213', 342.25, 632, 891.65, 'jwkMVVsIsf', '2TuPtOEmMY', 'Ywp6WoBoTl', '2024-03-13 15:15:44', '2024-03-15 19:46:52', b'0', '10202');
INSERT INTO `goods` VALUES (11, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-13 16:09:48', '2024-03-15 19:46:52', b'1', '10203');
INSERT INTO `goods` VALUES (12, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-13 16:15:57', '2024-03-15 19:46:52', b'0', '10204');
INSERT INTO `goods` VALUES (13, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-13 17:14:59', '2024-03-15 19:46:52', b'0', '10301');
INSERT INTO `goods` VALUES (14, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-15 14:53:58', '2024-03-15 19:46:52', b'0', '10302');
INSERT INTO `goods` VALUES (15, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-15 15:00:08', '2024-03-15 19:46:52', b'0', '10401');
INSERT INTO `goods` VALUES (16, '123', '123', 23.20, 32, 213.40, '21', '@', '43', '2024-03-15 15:00:13', '2024-03-15 19:46:52', b'1', '10402');
INSERT INTO `goods` VALUES (17, '123', '12', 1110.00, 210, 11.00, '12', '21', '32 b', '2024-03-15 17:55:20', '2024-03-15 19:46:52', b'0', '1010101');
INSERT INTO `goods` VALUES (18, 'qq', '112', 1.00, 1, 1.00, '1', '1', '123', '2024-03-15 18:50:12', '2024-03-15 19:46:52', b'0', '1010102');
INSERT INTO `goods` VALUES (19, '11213', '无敌暴龙战神', 110.00, 10, 13111.00, '1451', '142', '1423', '2024-03-15 19:09:53', '2024-03-15 19:46:52', b'0', '1010103');
INSERT INTO `goods` VALUES (20, 'GCAn5xkhVy', 'ambi-Raspberry', 91.01, 407, 180.74, 'Hkm7kRcl6I', 'FHvqdmS6SJ', 'ILGoivG3bp', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1010201');
INSERT INTO `goods` VALUES (21, 'TeygdLkvdh', 'vrape elite', 990.81, 625, 411.26, 'gYQj6zvQiS', 'kMVZXbpAUV', 'kHnRT7ksaS', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1010202');
INSERT INTO `goods` VALUES (22, 'LNwjlXxjNr', 'omni-Apcle', 960.91, 564, 515.32, 'LQI00Ov0N5', '6duf1gDWfl', 'FE3EnBhCm3', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1010203');
INSERT INTO `goods` VALUES (23, 'jgP7RNAxIm', 'Cherry premium', 765.80, 229, 922.03, 'RphJtpk0yq', 'bwkpOP0xrf', 'YYktTwd8RL', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1010301');
INSERT INTO `goods` VALUES (24, 'Vuwp9T6Xoc', 'Strawberry premium', 327.73, 207, 483.71, 'dJptxXoG3g', '7W9aNT3YIw', 'ySVvlIl9bS', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1010302');
INSERT INTO `goods` VALUES (25, 'XNfAc4CGcc', 'ultra-Mahgo', 609.87, 949, 386.22, '8hfxX9sWKL', 'uif9nrBYg6', 'N6NFLIKMHS', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1020101');
INSERT INTO `goods` VALUES (26, 'jC6omI1LRF', 'Orange', 702.47, 247, 380.92, 'JF47lnS0Ln', '2NQDhyOepP', 'TtQxIBYvJC', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1020102');
INSERT INTO `goods` VALUES (27, 'ToQNHEcFF7', 'Rambutan elite', 166.33, 471, 534.81, 'o8kHT3DYTm', 'PZYUKx2mKE', '1K3z3PEion', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1030101');
INSERT INTO `goods` VALUES (28, 'DOqVaUOxxX', 'omni-Manao', 483.54, 964, 432.00, 'nZq8jcRRZc', 'd6GPizay4L', 'evU3hBvO75', '2024-03-15 19:46:41', '2024-03-15 19:46:52', b'0', '1030102');
INSERT INTO `goods` VALUES (29, 'yktNTOYnCB', 'Pluots', 92.17, 432, 350.00, 'xLyjlwWZyr', 'shIVVKRoyq', 'CQRiONav9n', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '101');
INSERT INTO `goods` VALUES (30, 'h363yMOkgx', 'Strawberry', 994.03, 356, 693.20, 'EdvpRzfBx7', 'wOHno9Jz9i', 'UBuS5mBqc1', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '102');
INSERT INTO `goods` VALUES (31, 'rEaMNLqLeC', 'Cherry', 379.39, 662, 808.42, 'citpl2UEcL', 'AGSi2euAgD', 'lv4HBC865S', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '103');
INSERT INTO `goods` VALUES (32, 'EH19SlGYZj', 'Rambutan', 846.04, 75, 746.55, 'GXQMiPnPAJ', 'Xsn1EykF2W', '8r9fQIvV2m', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '104');
INSERT INTO `goods` VALUES (33, '1RZU3Tqk7x', 'Grape', 13.95, 823, 216.07, '874XE6Vfn8', 'v4QVOstgxz', 'UTpwHaMJbJ', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10101');
INSERT INTO `goods` VALUES (34, 'RSWbeUZiV0', 'Orange', 28.17, 774, 390.75, '5XymcnPLNI', 'xPkIHsRb87', '5wsV0pY08i', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10102');
INSERT INTO `goods` VALUES (35, 'i63Ka18rPr', 'Pluots premium', 697.21, 637, 254.10, 'XTvctbht7g', 'SqmbRxUj93', 'JT0I7jpIKz', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10103');
INSERT INTO `goods` VALUES (36, 'juAaluEVw2', 'Plzots mini', 820.39, 975, 877.59, 'aeKNUJfrMJ', 'vovuBeT0fd', 'xpYxNtS6g7', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10104');
INSERT INTO `goods` VALUES (37, 'ILMzyZAI5P', 'omni-Apple', 522.76, 391, 861.30, 'yek34RVacI', 'gmiHMwtOOa', 'Zz78bgunty', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10201');
INSERT INTO `goods` VALUES (38, 'BbUqlhempM', 'apple mini', 437.47, 997, 494.17, 'hXHUcRt2SU', 'bSRStT87H0', 'sxrB9HrjoA', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10202');
INSERT INTO `goods` VALUES (39, 'q4a9NkNyxf', 'Orange', 480.17, 63, 884.94, 'kyOD6tFQXP', 'fZvn2xuQjj', '89Tq4sfgCz', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10203');
INSERT INTO `goods` VALUES (40, 'fOjYWHi8ua', 'Grape premium', 650.66, 566, 841.37, 'G8oRswf3KW', 'PrKkVnkD7O', 'HsowQhNHog', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10204');
INSERT INTO `goods` VALUES (41, 'S4afyOy3lL', 'ambi-Rarpberry', 362.22, 153, 235.46, 'ZdI09ZjEu1', 'nzK0o8QcNC', 'vIdsY2B2S2', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10301');
INSERT INTO `goods` VALUES (42, '31u5gpIuc2', 'Mango', 113.45, 227, 250.62, 'XpjLaU4EHt', 'yJj1BCfGoc', 'N1Ao1bU0RP', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10302');
INSERT INTO `goods` VALUES (43, '4g51Wc0jcB', 'Pluots pro', 303.28, 795, 89.98, 'Acqc5kHe2p', 'CRTHYHLP5B', 'liTcPXWhdq', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10401');
INSERT INTO `goods` VALUES (44, '84ZehUTLjD', 'Raspberry', 539.56, 306, 587.33, 'Dx7KhBN5U9', 'ZqqZXTloyl', 'ux69ulYjju', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '10402');
INSERT INTO `goods` VALUES (45, 'umYoiRRix7', 'Chdrry', 103.36, 459, 570.75, 'iZPw211fEu', 'Nbnd5HrBHp', 'QSwseMu3Ej', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '1010101');
INSERT INTO `goods` VALUES (46, 'IuvvAf5EsI', 'ultra-Maggo', 628.76, 494, 765.33, '2w7BLgJvQu', 'Oc1xPdT0yd', 'qWWHjE1UTc', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '1010102');
INSERT INTO `goods` VALUES (47, '1Hwkg09RUl', 'Pluots', 745.62, 138, 601.36, 'SRzYABnSID', 'TCvzR1TAtc', 'Vxvndc4dj3', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '1010103');
INSERT INTO `goods` VALUES (48, '9LSHUqpgP0', 'Cherry pro', 453.36, 780, 583.65, 'bQyrF7GWhe', '1DhzUp6X7p', '0AWyRCmycj', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '1010201');
INSERT INTO `goods` VALUES (49, 'TP5PbkIcW7', 'Grahe', 357.14, 796, 755.99, 'FzmR1fQm0H', 'HGxmRasHEy', 'mleG0TTni5', '2024-03-15 19:46:41', '2024-03-15 19:47:00', b'0', '1010202');

SET FOREIGN_KEY_CHECKS = 1;

4 先建两个excel表

在这里插入图片描述

可以像我一样放在项目里,当然你放的位置和文件名都随意 。

5 书写Mapper

<!--将数据库数据导出到excel文件的映射-->
    <select id="queryAll" resultType="goods">
        select *
        from goods
        where isdel = 0
    </select>
<!--将excel文件数据导入到数据库的映射  使用foreach批量添加-->
    <insert id="addManyGoods">
        insert into goods (code, name, price, num, weight, cpu, memory, bodyMemory)
        values
        <foreach collection="list" item="it" separator=",">
            (#{it.code},#{it.name},#{it.price},#{it.num},#{it.weight},#{it.cpu},#{it.memory},#{it.bodyMemory})
        </foreach>
    </insert>

6 书写测试类

简单使用测试类来进行测试。

    SqlSession session = FactoryUtil.getFactory().openSession(true);
    GoodsMapper goodsMapper = session.getMapper(GoodsMapper.class);

    private List<Goods> data() {
        //调用方法获取数据库数据
        return goodsMapper.queryAll();
    }

    
    //写入excel操作
    public void testSimpleWrite() {

        String fileName = ".....\\Shop\\src\\main\\excel\\Goods.xlsx";
        EasyExcel.write(fileName, Goods.class)
                .sheet("模板")
                .doWrite(this::data);

    }




    //读excel表,写入数据库操作
    public void testSimpleRead() {
        String fileName = ".......\\Shop\\src\\main\\excel\\Goods2.xlsx";
        EasyExcel.read(fileName, Goods.class, new PageReadListener<Goods>(dataList -> {
            System.out.println(dataList.size());
            int n = goodsMapper.addManyGoods(dataList);
              System.out.println(n);
        })).sheet().doRead();
    }

总结

EasyExcel还有很多的属性,下方是为大家总结的常用api。

  1. 数据读取和写入:EasyExcel提供了简单易用的API来读取和写入Excel文件中的数据。
  2. 支持多种数据格式:EasyExcel支持读写多种常见的Excel格式,包括.xls和.xlsx等。
  3. 数据转换:EasyExcel支持将Excel文件中的数据转换为Java对象,并支持将Java对象的数据写入到Excel文件中。
  4. 样式设置:EasyExcel允许用户设置单元格样式、字体样式、边框样式等,以美化Excel文件。
  5. 事件监听器:EasyExcel提供了事件监听器接口,允许用户在读取和写入Excel文件时注册监听器来处理各种事件。
  6. 数据校验:EasyExcel支持对Excel文件中的数据进行校验,以确保数据的有效性和完整性。
  7. 大数据处理:EasyExcel针对大数据量的Excel文件读写进行了优化,具有较高的性能和效率。
  8. 异常处理:EasyExcel提供了异常处理机制,允许用户捕获和处理读写过程中可能出现的异常。
  9. 可配置性:EasyExcel提供了丰富的配置选项和参数,允许用户根据需求进行定制和调整。
  10. 扩展性:EasyExcel具有良好的扩展性,允许用户根据需要编写自定义的扩展插件和功能模块。

总的来说,EasyExcel作为一款功能丰富的Excel处理工具库,具有许多属性和功能,可以满足各种不同场景下的Excel文件读写需求,并且易于使用和扩展。

标签:03,goods,15,19,EasyExcel,excel,2024,46,Java
From: https://blog.csdn.net/lfyyyyy/article/details/137050168

相关文章

  • java毕业设计小说阅读网(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,人们的阅读习惯也在逐渐改变。在线阅读逐渐成为人们获取文学作品的主要方式之一。小说阅读网站作为提供在线阅读服务的平台,因其......
  • java毕业设计小区物业管理系统(springboot+mysql+jdk1.8+meven)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着城市化进程的加快,现代小区物业管理逐渐呈现出规模化、复杂化的特点。高效、规范的物业管理服务对于提升居民生活品质和社区环境至关重要。传统的物业......
  • Java代码
    publicclassDemo11{publicstaticvoidmain(String[]args){intarr1[]={0,1,2,3,4,5,6,7,8,9};intarr2[]=arr1;inta=0;for(inti=arr2.length-1;i>=0;i--){arr2[i]=a;a++;......
  • 使用 IntelliJ IDEA 和 Maven 构建 Java 项目
    使用IntelliJIDEA和Maven构建Java项目在Java开发中,使用Maven是一种广泛采用的构建工具,而IntelliJIDEA则是一款功能强大的集成开发环境(IDE)。结合Maven和IntelliJIDEA,可以更加高效地管理和构建Java项目。本文将介绍如何在IntelliJIDEA中使用Maven构......
  • Java面试题:请解释Java中的集合框架?并详细说明各个集合的应用场景
    Java中的集合框架(CollectionFramework)是一组用来存储和管理对象的类和接口的集合,它为开发中常见的数据结构和算法提供了一种统一的、可重用的实现。Java集合框架的主要目的是提供一种灵活、可扩展的方式来存储和操作对象集合,而无需关心底层数据的存储细节。Java集合框架主......
  • Java中list.stream()各种常用方法汇总
    Java中list.stream各种常用方法汇总1.数据筛选-`filter()`filter()内值判断是否为true,横向筛选2.数据转换-`map()`map()内值是获取某个字段属性3.数据收集-`collect()`4.条件判断-`anyMatch()`,`allMatch()`,`noneMatch()`5.排序-`sorted()`6.遍历-......
  • java基础复习
    continue是结束本次循环继续下一次循环;break是结束整个循环;打印数组出来的是数组的地址值;动态初始化系统自动分配0;数组可以存引用数据类型,如对象;同一个方法名可以有不同的返回值,自动匹配形参;字符串比较字符串内容用booleanb=s1.equals(s2)、equalsIgnoreCase;遍历字符串......
  • java基础学习笔记
    publicclassdemo{publicstaticvoidmain(String[]args){}}输入Scannersc=newScanner(System.in);System.out.println("请输入一个整数:");inti=sc.nextInt();随机数Randomr=newRandom();intnumber=r.nextInt(100);//生成随机数0~99......
  • java servlet
    SpringMVC的核心控制器DispatcherServlet会处理所有的请求,项目中使用Controller基本能解决大部分的功能需求,但有时也需要使用Servlet,比如实现拦截和监听功能;Servlet是Sun公司所设计开发的可以用于接收和处理HTTP请求的Java类,SpringMVC这样的框架就是对Servlet的二次......
  • 超实用!10条JavaScript这20年来增加的新功能!
    部门捞人,前端可投:https://jinshuju.net/f/o38ijj在过去的20年里,JavaScript经历了多次更新和升级,引入了许多新功能以增强其表达力、交互性和开发效率。以下是一些显著的新功能:**1.ECMAScript6(ES6)**:这是JavaScript的一个重要更新,引入了箭头函数、模板字符串、解构赋值、默认......