java使用easypoi--导入,导出

2023-11-10

 先引入maven依赖:

<!--easypoi依赖-->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!--阿里巴巴easyExcel-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.7</version>
        </dependency>
        <!-- 文件上传依赖 -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.1</version>
        </dependency>

 工具类:

package com.sport.sporttrailwalkadminserver.common.utils;

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;

public class FileUtil {
    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response){
        ExportParams exportParams = new ExportParams(title, sheetName);
        exportParams.setCreateHeadRows(isCreateHeader);
        defaultExport(list, pojoClass, fileName, response, exportParams);

    }
    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName, HttpServletResponse response){
        defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));
    }
    public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response){
        defaultExport(list, fileName, response);
    }

    private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) {
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list);
        if (workbook != null);
        downLoadExcel(fileName, response, workbook);
    }

    private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-Type", "application/vnd.ms-excel");
            response.setHeader("Content-Disposition",
                    "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            workbook.write(response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
            //throw new NotFoundException(e.printStackTrace());
        }
    }
    private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {
        Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);
        if (workbook != null);
        downLoadExcel(fileName, response, workbook);
    }

    public static <T> List<T> importExcel(String filePath,Integer titleRows,Integer headerRows, Class<T> pojoClass){
        if (StringUtils.isBlank(filePath)){
            return null;
        }
        ImportParams params = new ImportParams();
        params.setTitleRows(titleRows);
        params.setHeadRows(headerRows);
        List<T> list = null;
        try {
            list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);
        }catch (NoSuchElementException e){
            e.printStackTrace();
            //throw new NotFoundException("模板不能为空");
        } catch (Exception e) {
            e.printStackTrace();
            //throw new NotFoundException(e.getMessage());
        }
        return list;
    }
    public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){
        if (file == null){
            return null;
        }
        ImportParams params = new ImportParams();
        params.setTitleRows(titleRows);
        params.setHeadRows(headerRows);
        List<T> list = null;
        try {
            list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);
        }catch (NoSuchElementException e){
            //throw new NotFoundException("excel文件不能为空");
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
           // throw new NotFoundException(e.getMessage());
        }
        return list;
    }
}

 

list<Map> 转List<对象>工具

package com.sport.sporttrailwalkadminserver.common.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.sport.sporttrailwalkadminserver.po.trailwalk.TrailActivityApplyExport;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.util.StringUtils;

import java.lang.reflect.Type;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class ListUtil {
    /**
     * targetList 需要处理的list
     * targetClass 目标class
    * @return List 处理好的list
    */
    public List listMapParseListObj(List targetList, Class targetClass){
        // 先获取该类的代理对象
        Object obj = null;
        try {
            obj = targetClass.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

        // 将list转为list对象
        for(int i = 0; i< targetList.size(); i++){
           Map map = (Map)targetList.get(i);                  // 获取每个list里面每个map
           Iterator it = map.keySet().iterator();
           while(it.hasNext()){
               String name = it.next().toString();      // 名称 key
               String value = map.get(name).toString(); // 值  value
               try{
                   //取得值的类形
                   Class type = PropertyUtils.getPropertyType(obj, name);
                   if(!StringUtils.isEmpty(type)){
                       PropertyUtils.setProperty(obj, name, ConvertUtils.convert(value, type));
                   }
               }catch(Exception ex){
                   ex.printStackTrace();
               }
           }
       }


       // 将list<Map> 转为对象进行返回
       List resListObj = Lists.newArrayList();
       for (Object object : targetList) {
           JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(object));
           resListObj.add(jsonObject.toJavaObject((Type)targetClass));
       }

       //返回封装好的集合
       return resListObj;
    }
}

 

sql对应的实体类:

package com.sport.sporttrailwalkadminserver.po.trailwalk;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ExcelTarget("TrailActivityApplyExport")
public class TrailActivityApplyExport implements Serializable {
    @Excel(name = "姓名", orderNum = "1", width = 25,needMerge = true)
    private String name;

    @Excel(name = "性别", orderNum = "2", width = 25,needMerge = true)
    private String sex;

    @Excel(name = "出生年月日", orderNum = "3", width = 25,needMerge = true)
    private String birthday;  //出生年月日

    @Excel(name = "证件类型", orderNum = "4", width = 25,needMerge = true)
    private String license_type;  //证件类型(1身份证号, 2护照, 3港澳台, 4其他)

    @Excel(name = "证件号码", orderNum = "5", width = 25,needMerge = true)
    private String license_number;

    @Excel(name = "联系方式", orderNum = "6", width = 25,needMerge = true)
    private String mobile;

    @Excel(name = "报名时间", orderNum = "7", width = 25,needMerge = true)
    private String apply_time;

    @Excel(name = "状态", orderNum = "8", width = 25,needMerge = true)
    private String apply_status; //报名状态(1正常,2禁赛)
}

获取sql集合:  

 

 

导出:

 

导入:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java使用easypoi--导入,导出 的相关文章

  • 为什么java中的BigInteger被设计成不可变的?

    在 java 中 BigInteger 是不可变的 但我想了解为什么 因为很多时候它用于进行大量计算 从而产生大量对象 所以 不让它变得不可变感觉有点直观 我想到的情况类似于字符串操作 然后是 StringBuilder 的选项 是否应该有
  • JavaFX:如何在 JavaFX 中正确使用 ProgressIndicator

    我是 JavaFX 新手 我的 JavaFX 应用程序有问题 我需要在数据库查询之前启动 ProgressIndicator 类型 INDETERMINATE 这是我的代码的一部分 spinner setVisible true passC
  • Java用逗号或点和两个小数值验证价格[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 验证必须用点或逗号表示价格值且最多具有两位小数值的字符串的最佳方法和解决方案是什么 RegExp java text DecimalFor
  • 使用synchronized关键字和lock有什么区别[重复]

    这个问题在这里已经有答案了 Java 5引入了lock方法 与synchronized关键字相比 使用lock有什么优点和缺点 同步 将锁定该方法内访问的任何资源 lock 允许您进行更精细的控制 例如 仅锁定某些资源 或者仅在满足特定条件
  • 从不同 JVM 中的 Java 桌面应用程序中执行 Java main 方法

    我有一个桌面应用程序 当有人按下按钮时 我希望它启动另一个执行类的 main 方法的 JVM 我的桌面应用程序已经依赖于包含具有我想要执行的 main 方法的类的 jar 目前我有以下代码 但是 我希望它们是一种更优雅的方法 Runtime
  • JavaFX TabPane 禁用按键切换选项卡

    我有一个Tab有一些内容 ScrollBar和别的 The ScrollBar has event handler for keys left and right 但如果我按下这些按钮Tabs被切换 因为TabPane还有一个密钥处理程序
  • 动态添加的 RemoteView 上的布局权重

    在我的小部件中 我使用以下内容将项目 R layout widget item 动态添加到我的主小部件布局中定义的 LinearLayout 中 Main widget layout RemoteViews views new Remote
  • 如何在 Spring Security 中创建自定义身份验证过滤器?

    我正在尝试创建一个自定义 Spring Security 身份验证过滤器以实现自定义身份验证方案 我花了几个小时阅读 Spring Security 但我找到的所有指南都解释了如何配置基本设置 我正在尝试编写自定义设置 但无法找到有关如何执
  • R:连接到 Teradata 时 JDBC() 找不到 Java 驱动程序路径

    我正在尝试通过 RStudio 连接到 Teradata 但由于某种原因 JDBC 函数在识别 Java 驱动程序所在的路径时出现问题 请参阅下面的代码 library RODBC library RJDBC library rJava b
  • 仅在文件下载完成后设置 cookie。

    我有一个场景 我想告诉用户下载完成并提示关闭按钮 为此 我使用 jquery 插件来连续监视 cookie 以了解下载何时完成 我的问题是我想设置这个cookie fileDownload true and path 下载完成后立即进行 为
  • Android O - 通知通道和NotificationCompat

    我无法改变这种感觉 Android 开发人员再次提出了一些新东西 却让每个人都对他们如何看待该功能的使用一无所知 我说的是 Android O 中的通知通道 多年来 我一直使用兼容性支持库来避免处理特定平台的细节 即 Notificatio
  • 本机查询 (JPA) 未重置并返回相同的旧结果

    我有一个本机 sql 查询如下 for init i 0 i lt 2 i String sql Select from accounts where id Query query em createNativeQuery sql Acco
  • 为自定义 userdetailsservice 定义 bean

    我如何定义我的自定义UserDetailsServicebean 的方式使我的 spring mvc Web 应用程序能够使用我的底层 MySQL 数据库来检查用户和密码的身份验证 具体如下 我正在添加安全性spring petclinic
  • org.apache.http 软件包在 API 级别 23 中被删除。替代方案是什么?

    在更新到最新的 android API 级别 23 Marshmallow 后 通过 build gradle 添加以下更改后 所有 org apache http 类都不起作用 android compileSdkVersion 23 b
  • 使用可变参数绘制星形

    我的任务是编写程序 允许用户绘制星星 星星的大小和手臂数量可能不同 当我处理基本星时 我使用 GeneralPath 和点表进行处理 int xPoints 55 67 109 73 83 55 27 37 1 43 int yPoints
  • 从字符串中删除特定字符[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何从字符串中删除特定字符 我有一个 Arraylist 测试数组 String line testingarray get index
  • FirebaseAuth.getInstance().signOut() 不注销

    我尝试从 firebase 注销用户 但在关闭应用程序并再次打开后 用户仍然处于连接状态 我尝试从 firebase 定期注销用户 但没有解决问题 我想知道是什么导致了这个问题 logout setOnClickListener new V
  • ACTION_MEDIA_BUTTON 的广播接收器不起作用

    我正在为 Android 操作系统版本 4 0 3 ICS 编写 Android 应用程序 问题是我没有从 BroadcastReceiver 的 onReceive 方法中的 Log d 获得输出 这意味着我的应用程序没有正确处理广播 我
  • 将字符串从代码页 1252 转换为 1250

    我怎样才能转换一个String将代码页 1252 中的字符解码为String在代码页 1250 中解码 例如 String str1252 String str1250 convert str1252 System out print st
  • Spring Boot 应用程序崩溃

    请告诉我哪里有问题 我尝试启动我的第一个在 Spring Boot 上开发的应用程序 我已经在 SpringMVC 上有了简单的 Web 项目 现在我喜欢在 BOOT 上构建它 这是错误输出 org springframework bean

随机推荐

  • Qt项目中,自定义数据类型的创建及使用方式

    总第25篇 在Qt的项目开发过程中 特别是在制作一些特殊界面时 通常框架中自带的数据类型难已满足具体的要求 这时就需要开发者自己创建新的数据类型来扩展或替换原有的数据类型 本文将详细介绍自定义数据类型的方法以及如何将其集成到Qt对象模型中
  • 让对方qq崩溃的代码2020_解决 KUbuntu 18.04 下 Deepin Wine QQ 运行十分钟后崩溃的问题...

    环境 KUbuntu 18 04 通过 https github com wszqkzqk deepin wine ubuntu 中的 kde install sh 脚本安装 deepin wine 然后根据对应链接安装了 QQ 现象 安装
  • 切换慢镜头tween.js的使用

    普通镜头切换 设置相机位置和观察方向即可 camera position set aim x aim y 2 aim z 4 camera lookAt设置与OrbitControls冲突需要设置controls target camera
  • JMeter测试HBase

    在网上找了关于jmeter连接hbase的方式 主要分为两种 通过导入jar包连接 Java Request 和通过BeanShell远程连接 由于刚接触jmeter没多久 对BeanShell还不熟 所以打算通过eclipse用Java编
  • Matlab常用操作--删除字符串中任意字符、矩阵之间转换、常见取整函数、矩阵生成CSV文件、strcat函数

    Matlab常用操作 1 MATLAB删除字符串中任意字符 2 MATLAB 一二三维矩阵之间转换 3 MATLAB常见取整函数 4 MATLAB 将矩阵生成CSV文件 5 Matlab字符串连接加空格 strcat函数 6 将矩阵保存到t
  • javaScript的Math数学对象 --用法大全

    Math是 JavaScript 的原生对象 提供各种数学功能 该对象不是构造函数 不能生成实例 所有的属性和方法都必须在Math对象上调用 简而言之就如同java的静态类一样 都是通过类名 方法名 调用的 Math对象的用法大致可以分为
  • 【Sqli-Labs-Master】Less-5 (报错注入)

    Less5 单引号的注入 id 1 报错 id 1 23 尝试闭合 成功回显 看到这个报错信息 基本就行布尔型盲注 报错型注入 时间延迟型盲注 UNION联合查询型注入应该是不能用了 查看源代码 sql SELECT FROM users
  • samba Error NT_STATUS_CONNECTION_REFUSED Failed to connect with SMB1 -- no workgroup available

    连接同事的共享服务时报错 smbclient L ip U user WARNING The syslog option is deprecated Enter WORKGROUP administrator s password Shar
  • invalid stream header问题的解决

    今天调试一个http接口 调用端代码如下 URL url new URL http www AAA com HttpURLConnection connection HttpURLConnection url openConnection
  • Collections.sort方法对list排序的两种方式

    Collections sort 分为两部分 一部分为排序规则 一部分为排序算法 规则用来判断对象 算法则考虑如何进行排序 对于自定义对象 sort 不知道规则 所以无法比较 这种情况下一定要定义排序规则 方式有两种 第一种 java la
  • Raid0、 Raid1、 Raid5、 Raid10的原理、特点、性能区别

    一 RAID 是什么 RAID Redundant Array of Independent Disks 即独立磁盘冗余阵列 简称为 磁盘阵列 其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统 从而实现比单块磁盘更好的存储性能和更高的
  • 浏览器的渲染原理

    引言 在我们的日常生活中 互联网已经不可或缺 而游览器 就像是我们浏览这个数字世界的窗口 成为我们与互联网交流的必备工具 有时候 你是否被一些页面无法正确显示 或者响应缓慢等情况困扰过 这就需要我们理解浏览器的 大脑 内核 及其如何将代码渲
  • 机器学习识别身份证信息代码

    用机器学习识别身份证信息需要一些步骤 收集身份证图像数据并打标签 使用深度学习模型 如卷积神经网络 训练识别模型 使用OpenCV等图像处理库对身份证图像进行预处理 以便模型能够识别 使用模型对身份证图像进行预测 并获取身份证信息 但是这里
  • java 跨域问题

    今天看到了一个解决跨域问题的方法 感觉挺方便的 记录一下 1 首先需要创建一个filter public class CorsFilter implements Filter public void init FilterConfig fi
  • Flutter的oktoast插件详解

    文章目录 简介 详细介绍 安装和导入 导入 在MaterialApp外面套一层OKToast组件 为什么是包住MaterialApp 显示Toast消息 高级使用 Toast位置 Toast持续时间 自定义Toast样式 高级用法 使用场景
  • 微信小程序使用echarts图表,与延迟加载图表,解决echarts文件过大

    微信小程序使用echarts图表 与延迟加载图表 解决echarts文件过大 引入echarts组件 展示echarts图表数据 延迟加载图表 如何解决echarts文件过大 引入echarts组件 前往echarts微信版的github地
  • 【华为OD】

    目录 一 题目描述 二 输入描述 三 输出描述 用例 四 题目解析 五 Java玩法 六 JavaScript玩法 一 题目描述 小明有 n 块木板 第 i 1 lt i lt n 块木板长度为 ai 小明买了一块长度为 m 的木料 这块木
  • revit二次开发之选择集Selection和过滤集FilteredElementCollector例子(Revit-API2016)

    1 目的 获取当前选择集中包含的对象并列举出来 using System using System Collections Generic using System Linq using System Text using System T
  • 图片处理命令行工具ImageMagick介绍

    最近在做百度OCR图片文字识别时 因为免费版OCR接口调用次数有限 就想把多张图片合并成一张进行文字识别 这就需要在代码中进行图片合并操作 在查找图片批量合并方案时 看到了linux的convert命令 可以将多张图片合并 且使用特别方便
  • java使用easypoi--导入,导出

    先引入maven依赖