EasyPOI复杂表格导入

news2024/11/28 16:39:01

EasyPOI复杂表格导入

  • 多表头数据导入
    • 方式一
      • 导入表格实体类
      • 文件导入代码
      • 测试结果
    • 方式二
      • 导入表格实体类
      • 文件导入代码
      • 测试结果
    • 总结
  • 设置表格从哪行读取表格内容

多表头数据导入

方式一

导入的表格样式如下
在这里插入图片描述

导入表格实体类

package com.demo.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;

import java.io.Serializable;

@Data
public class SerailNum implements Serializable {

    /**
     * 序号
     */
    @Excel(name = "序号")
    private String serialNum;
}

package com.demo.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;

import java.io.Serializable;

@Data
public class BasicInfo implements Serializable {

    @Excel(name = "姓名")
    private String name;

    @Excel(name = "性别")
    private String gender;
}

package com.demo.entity;

import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import lombok.Data;

import java.io.Serializable;

@Data
public class UserBO implements Serializable {

    @ExcelEntity(name = "序号")
    private SerailNum serailNum;

    @ExcelEntity(name = "基本信息")
    private BasicInfo basicInfo;
}

文件导入代码

package com.demo;

import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.alibaba.fastjson2.JSON;
import com.demo.entity.UserBO;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;

@SpringBootTest
public class UserTest {

    @Test
    public void testImport() throws Exception {
        ImportParams params = new ImportParams();
        params.setTitleRows(1);//标题列占几行
        params.setHeadRows(1);//header列占几行
        // 字段真正值和列标题之间的距离 默认0行
        /**
        *表格真正有值的行数离表格的标题列还差一行,如果表格列下的第一行为表格的实际内容,则不需要
        *设置  params.setStartRows(1);
        */
        params.setStartRows(1);
        // 文件输入流读取数据
        InputStream inputStream = new FileInputStream("C:\\Users\\16837\\Desktop\\test\\social.xls");

        List<UserBO> userBOList= ExcelImportUtil.importExcel(inputStream,UserBO.class,params);
        System.out.println("导入数据");
        System.out.println(userBOList);
    }
}

测试结果

控制台输出
在这里插入图片描述

方式二

导入表格实体类

package com.demo.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import lombok.Data;

import java.io.Serializable;

@Data
public class UserBO implements Serializable {

    @Excel(name = "序号")
    private String serialNum;

    @Excel(name = "姓名")
    private String name;

    @Excel(name = "性别")
    private String gender;
}

文件导入代码

package com.demo;

import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import com.alibaba.fastjson2.JSON;
import com.demo.entity.UserBO;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;

@SpringBootTest
public class UserTest {

    @Test
    public void testImport() throws Exception {
        ImportParams params = new ImportParams();
        params.setTitleRows(1);//标题列占几行
        params.setHeadRows(1);//header列占几行
        // 字段真正值和列标题之间的距离 默认0行
        /**
        *表格真正有值的行数离表格的标题列还差一行,如果表格列下的第一行为表格的实际内容,则不需要
        *设置  params.setStartRows(1);
        */
        params.setStartRows(1);
        // 文件输入流读取数据
        InputStream inputStream = new FileInputStream("C:\\Users\\16837\\Desktop\\test\\social.xls");

        List<UserBO> userBOList= ExcelImportUtil.importExcel(inputStream,UserBO.class,params);
        System.out.println("导入数据");
        System.out.println(userBOList);
    }
}

测试结果

在这里插入图片描述

总结

方式一和方式二,不同之处在于导入表格实体的设计,方式一是通过@ExcelEntity来映射合并的表格列,方式二是直接通过 @Excel来映射要读取的表格列,然后在导入的时候,设置表格真正要读取的表格列和表格字段真正值从哪行读取

设置表格从哪行读取表格内容

通过ImportParams设置startRows
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1581786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot实现常州地方旅游管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现旅游管理系统演示 摘要 随着旅游业的迅速发展&#xff0c;传统的旅游信息查询方式&#xff0c;已经无法满足用户需求&#xff0c;因此&#xff0c;结合计算机技术的优势和普及&#xff0c;针对常州旅游&#xff0c;特开发了本基于Bootstrap的常州地方旅游管…

1.微服务

一、微服务是什么 微服务是一种架构风格&#xff0c;即&#xff0c;一个应用应该是一组小型服务&#xff0c;每个服务器只负责一种服务&#xff0c;服务之间可以通过 HTTP 的方式进行互通。每一个功能元素最终都是一个可独立替换和独立升级的软件单元。 可以说&#xff0c;微…

湖北省武汉市二级分类30米土地利用数据下载

武汉市&#xff0c;湖北省省会&#xff0c;位于湖北省东部、长江与汉水交汇处&#xff0c;总面积8569.15平方千米。全市低山、丘陵、垄岗平原与平坦平原的面积分别占土地总面积的5.8%、12.3%、42.6%和39.3%&#xff0c; 湖北省武汉市土地利用数据是在对植被生长较好时间的Lands…

Linux进阶篇:centos7扩展root分区:LVM应用案例

centos7扩展root分区&#xff1a;LVM应用案例 当服务器根分区或者是root分区存储空间快用完的时候&#xff0c;并且重要的数据都在root分区下&#xff0c;当如何应对&#xff0c;没关系坐好&#xff0c;分分钟解决它&#xff0c;我们可以进行分区扩容。 一 添加一块新的硬盘 …

少儿编程 2024年3月电子学会图形化编程等级考试Scratch二级真题解析(选择题)

2024年3月scratch编程等级考试二级真题 选择题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 1、默认小猫角色&#xff0c;运行程序后&#xff0c;舞台上出现的图形是 A、 B、 C、 D、 答案&#xff1a;A 考点分析&#xff1a;考查积木综合使用&…

Java常见算法_常见的查找算法和排序算法——简介及代码演示

在本文中我将介绍Java中的常见算法&#xff0c;查找算法包括基本查找、二分查找、插值查找和分块查找。排序算法包括冒泡排序、选择排序、插入排序和快速排序 查找算法&#xff1a; 1.基本查找&#xff1a; 代码&#xff1a; public class BasicSearchDemo {public static …

多线程学习-Lock锁以及监视器锁详解

目录 1. Lock锁 1.1 Lock锁介绍 1.2 Lock锁的其他加锁方式 1.3 Lock和synchronized对比 2.监视器锁 1. Lock锁 1.1 Lock锁介绍 我们知道使用同步方法或同步代码块会自动加锁和解锁&#xff0c;那有没有办法可以自己控制加锁和解锁的时机呢&#xff1f; java在JDK1.5之后提供了…

BoostCompass(数据准备预处理模块)

阅读导航 一、网页数据下载二、编写数据去标签与数据清洗的模块 Parser✅boost 开发库的安装1. 基本思路2. 详细讲解&#xff08;1&#xff09;程序递归遍历目录&#xff0c;收集所有HTML文件的路径&#xff08;2&#xff09;对每个HTML文件进行解析&#xff0c;提取出文档标题…

政安晨:【深度学习神经网络基础】(五)—— 霍普菲尔德神经网络和玻尔兹曼机

目录 简述 霍普菲尔德神经网络 训练霍普菲尔德神经网络 Hopfield-Tank神经网络 玻尔兹曼机 总之 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&am…

Python学习笔记10 - 程序的组织结构

1. if 语句 2. pass语句 3. 内置函数range() 4. while 循环语句 5. for-in 循环语句 6. 流程控制语句 break 7. 流程控制语句 continue 8. else 语句 9. 嵌套循环

申请GeoTrust证书

GeoTrust是全球知名的数字证书颁发机构&#xff08;CA&#xff09;和安全解决方案提供商。它成立于1999年&#xff0c;后来成为DigiCert旗下的一部分。GeoTrust专注于提供SSL证书和其他安全产品&#xff0c;以保护网站流量、电子邮件通信和企业身份的安全。 GeoTrust的SSL证书在…

Vue+node.js蔬菜水果农产品网上商城管理系统

用户能够及时掌握最新的数据&#xff0c;并能有效地提升用户的服务水平。本制度的优势在于&#xff1a; &#xff08;1&#xff09;该系统将蔬菜信息及时地提供给使用者。使用者可以在任何时候登陆该网站查询相关资讯&#xff0c;所有资讯均真实可信&#xff0c;并严肃处理各项…

test4102

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

YUDAO源码中的正序倒序表格ElmentUI的实现,与后端的配合?

前端展示和实现&#xff1a; 1. elmentUI表格的定义 2. JS请求参数改造 <!-- 列表 --><el-table v-loading"loading" :data"list" sort-change"handleSortChange"><el-table-column label"Expiry Date" prop"…

人体跟随小车(旭日x3派、yolov5、目标检测)

人体跟随小车&#xff08;yolov5、目标检测&#xff09; 前言最终结果接线实现注意 前言 上板运行的后处理使用cython封装了&#xff0c;由于每个版本的yolo输出的形状不一样&#xff0c;这里只能用yolov5-6.2这个版本。 ①训练自己的模型并部署于旭日x3派参考&#xff1a; ht…

直播系统的短视频直播源码,带有多功能后台系统的直播短视频平台 APP 源码。

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 此源码是一个直播系统&#xff0c;集直播、短视频等功能&#xff0c;根据市场趋势开发并推出思乐直播APP&#xff0c;APP功能丰富且可在后台管理系统进行配置&#xff0c;做到按需求来…

【算法一则】贪心加双指针-盛水最多的容器

目录 题目题解贪心算法双指针解题思路暴力破解法双指针 总结 题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器…

设计模式学习笔记 - 设计模式与范式 -行为型:7.责任链模式(下):框架中常用的过滤器、拦截器是如何实现的?

概述 上篇文章《6.责任链模式&#xff08;上&#xff09;&#xff1a;原理与实现》&#xff0c;学习了职责链模式的原理与实现&#xff0c;并且通过一个敏感词过滤框架的例子&#xff0c;展示了职责链模式的设计意图。本质上来说&#xff0c;它跟大部分设计模式一样&#xff0…

不到6毛钱的I2C总线实时时钟日历芯片LK8563

前言 8563实时时钟芯片&#xff0c;国内外均有多家生产&#xff0c;今推荐一个性价比极高的RTC芯片&#xff0c;LK8563&#xff0c;一片不到6毛钱. 特点 基于32.768kHz晶体的秒&#xff0c;分&#xff0c;小时&#xff0c;星期&#xff0c;天&#xff0c;月和年的计时 带有世…

【堡垒机】堡垒机的介绍

目前&#xff0c;常用的堡垒机有收费和开源两类。 收费的有行云管家、纽盾堡垒机&#xff1b; 开源的有jumpserver&#xff1b; 这几种各有各的优缺点&#xff0c;如何选择&#xff0c;大家可以根据实际场景来判断 什么是堡垒机 堡垒机&#xff0c;即在一个特定的网络环境下&…