导出EXCEL工具类

Poi导出Excel工具类 一、概述 在工作过程中,都会遇到这样一个需求,就是将相关的数据列表导出成excel,这里写成通用的导出Excel的工具。 二、项目实现 1、构建pom.xml 我的工程是利用Maven来构建的,这里仅给出最核心的包 <dependency> <groupId>org.apache.poi</groupId> <artifactI... 阅读详情

基于注解设置excel的字段。

使用方法:

// 导出数据
List data = new ArrayList();
String excelName = "name";
ExcelUtil.export(response, data, excelName, true);

ExcelUtil.java

package com.yuwen.common.util;

import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.xssf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author 相柳
 * @date 2021/12/16
 */
public class ExcelUtil {

    private static final Logger LOGGER = LoggerFactory.getLogger(ExcelUtil.class);

    /**
     * 导出excel
     *
     * @param response  response
     * @param data      data
     * @param excelName excelName
     * @param noFlag    添加序号的标志:true-添加,false-不添加
     */
    public static <T> void export(HttpServletResponse response, List<T> data, String excelName, boolean noFlag) {
        OutputStream out;
        try {
            // 1.创建excel和sheet
            XSSFWorkbook wb = new XSSFWorkbook();
            XSSFSheet sheet = wb.createSheet();

            if (data.size() != 0) {
                // 2.填充数据
                // 创建一个居中格式
                XSSFCellStyle style = wb.createCellStyle();
                style.setAlignment(HorizontalAlignment.CENTER);

                // 创建表头
                Class<?> dataClass = data.get(0).getClass();
                List<String> head = getHead(dataClass, noFlag);
                XSSFRow row = sheet.createRow(0);
                for (int i = 0; i < head.size(); i++) {
                    XSSFCell cell = row.createCell(i);
                    cell.setCellValue(head.get(i));
                    cell.setCellStyle(style);
                }

                // 2.设置数据
                for (int i = 1; i <= data.size(); i++) {
                    T tar = data.get(i - 1);
                    XSSFRow dataRow = sheet.createRow(i);

                    Field[] fields = dataClass.getDeclaredFields();

                    int limit = 0;
                    if (noFlag) {
                        XSSFCell cell = dataRow.createCell(0);
                        cell.setCellValue(i);
                        cell.setCellStyle(style);
                        limit = 1;
                    }
                    // 通过反射插入数据
                    for (int j = limit; j < fields.length + limit; j++) {
                        XSSFCell cell = dataRow.createCell(j);
                        Field field = fields[j - limit];
                        // 有ExcelCol注解的字段才会被导出
                        if (field.isAnnotationPresent(ExcelCol.class)) {
                            field.setAccessible(true);
                            // 对于时间字段,根据规则格式化字段值
                            if (field.isAnnotationPresent(ExcelDatePattern.class)) {
                                String pattern = field.getAnnotation(ExcelDatePattern.class).pattern();
                                Date obj = (Date) field.get(tar);
                                SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
                                String format = obj == null ? "" : dateFormat.format(obj);
                                cell.setCellValue(format);
                            } else {
                                // 把字段进行convert转换
                                ExcelCol excelCol = field.getAnnotation(ExcelCol.class);
                                ExcelDictConvert convert = excelCol.convert().newInstance();
                                Object key = field.get(tar);
                                cell.setCellValue(key == null ? "" : convert.convert(key.toString()));
                            }
                            // 设置cell的格式
                            cell.setCellStyle(style);
                        }
                    }
                }
            }

            // 3.导出excel
            out = response.getOutputStream();
            // 设置文件名
            String fileName = excelName + ".xlsx";
            // 导出
            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
            wb.write(out);
        } catch (Exception e) {
            LOGGER.error("导出" + excelName + "失败", e);
            try {
                out = response.getOutputStream();
                LOGGER.error("导出" + excelName + "失败", e);
                String fileName = "error";
                response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
                out.write(new byte[]{});
            } catch (IOException ignored) {

            }
        }
    }

    /**
     * 获取表头
     *
     * @param cls    cls
     * @param noFlag noFlag
     * @return java.util.List<java.lang.String>
     */
    private static List<String> getHead(Class<?> cls, boolean noFlag) {
        List<String> retList = new ArrayList<>();
        Field[] fields = cls.getDeclaredFields();
        for (Field field : fields) {
            if (field.isAnnotationPresent(ExcelCol.class)) {
                retList.add(field.getAnnotation(ExcelCol.class).name());
            }
        }
        if (noFlag) {
            retList.add(0, "序号");
        }
        return retList;
    }

}

ExcelDictConvert.java

package com.yuwen.common.util;

/**
 * 字段字段转换接口
 *
 * @author yuwen
 * @date 2022/6/6
 */
public interface ExcelDictConvert {

    /**
     * 把key,转为对应的值
     *
     * @param key key
     * @return java.lang.String
     */
    String convert(String key);
}

ExcelDatePattern.java

package com.yuwen.common.util;

import java.lang.annotation.*;

/**
 * 该注解作用于字段上,配合ExcelUtil使用
 *
 * @author yuwen
 * @date 2022/6/2
 */
@Target(value = ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExcelDatePattern {
    /**
     * 格式化时间的规则
     *
     * @return java.lang.String
     */
    String pattern();
}

ExcelCol.java

package com.yuwen.common.util;

import java.lang.annotation.*;

/**
 * 该注解作用于字段上,配合ExcelUtil使用
 *
 * @author yuwen
 * @date 2022/6/2
 */
@Target(value = ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExcelCol {

    /**
     * 列名
     *
     * @return java.lang.String
     */
    String name();

    Class<? extends ExcelDictConvert> convert() default DefaultDictConvert.class;
}

DefaultDictConvert.java

package com.yuwen.common.util;

/**
 * @author yuwen
 * @date 2022/6/6
 */
public class DefaultDictConvert implements ExcelDictConvert {
    @Override
    public String convert(String key) {
        return key;
    }
}

Excel导入导出工具类(完整版) ExcelUtil工具类 package com.gdz.excel.util; import java.io.*; import java.lang.reflect.Field; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; import org.apache.poi... 阅读详情

相关推荐

告别Colmap!在ROS2 Humble上,用Fast-LIVO2直接为3D Gaussian Splatting准备数据全流程

本文详细介绍了在ROS2 Humble环境下,使用Fast-LIVO2为3D Gaussian Splatting(3DGS)准备数据的全流程。通过优化Fast-LIVO2配置、实时数据同步机制和3DGS训练参数,显著提升了三维重建效率和质量,相比传统Colmap流程节省95%以上的预处理时间。适用于Ubuntu22.04系统,适合机器人及自动驾驶领域的三维重建应用。

weixin_28688385的博客 589

工具类Utils

2. ExportUtils(POI导出) 可以包装一下实现网页的导出; 3.PDFUtil(PDF加水印,图片转PDF,PDF转图片) 4.修改配置文件工具类 5.java 获取服务器参数 no sigar-amd64-winnt.dll in java.library.path

欢迎所有人,批评指正! 480

【技术分享】语音多模态LLM越狱

语音多模态LLM越狱攻击作为一种新兴安全威胁,揭示了多模态模型在语音输入场景下的脆弱性。尽管已有多种攻击方法被提出,但其具体实现步骤、防御措施的有效性及行业影响等问题仍需进一步探索[9]。未来研究应聚焦于改进模型架构、开发针对性防御策略,并评估语音输入越狱攻击的实际危害。只有通过全面理解这些挑战,才能为多模态智能系统的安全性提供更可靠的保障。说到语音多模态LLM越狱的具体实现步骤,这其实是一个复杂且多层次的过程🧐。首先,攻击者需要深入分析目标模型的响应模式和安全机制,找出可能的漏洞点。

qq_29883477的博客 1261

Excel文件导入&导出工具类

之前写过一篇导出Excel文件的通用类的文章,当时只实现了导出数据到Excel的功能,这次在上次的基础上,增加从Excel读取数据到List的功能,依旧使用POI读取Excel文件。

java_t_t的博客 1914

vivado生成及调用自定义IP的方法

开发环境:vivado 2018.2 1.将整个工程封装为自定义IP 将整个工程封装为自定义IP主要有以下步骤: 步骤1.选中工程中的top模块。点击Tools ------> Create and Package New IP,如图1所示 图1 步骤2.弹出界面后,点击next至图2界面,选择Package your current project,然后继续点击next 图2 步骤3.选择生成的IP路径,如图3所示。这个路径就是后续添加该IP的路径 图3 步骤4.继续点击next,然后选择fi

进击的阿日比 4735

华为[ENSP]—— 实验二、三层交换和ARP的工作原理

华为[ENSP]三层交换和ARP的工作原理

weixin_62594100的博客 6412

Excel常用导入导出工具类

【代码】Excel常用导入导出工具类。

ls18802694089的博客 743

Microsemi Libero系列教程(二)——新建点灯工程

前言 上一篇文章,介绍了Microsemi Libero系列教程(一)-Libero开发环境介绍,下载,安装与注册,作为嵌入式开发中的Hello World,点灯是再也基础不过的实验了,通过点灯实验,可以了解芯片GPIO的控制和开发环境IDE新建工程的流程,对于FPGA来说,每个IO口几乎一样,所以本篇文章主要学习一下如何基于Microsemi Libero集成开发环境建立一个示例工程,让一个L...

whik1194的博客 1万+

【RuoYi-Vue-Plus】学习笔记 49 - Easy Excel(三)自定义转换器 ExcelDictConvert 源码分析

简单分析自定义字典类型转换器 ExcelDictConvert。

MichelleChung的星球 4415

传感器应用案例:压力传感器在工业自动化中的应用_(13).压力传感器的数据采集与处理

数据采集系统(Data Acquisition System, DAS)是连接传感器和控制系统的重要桥梁。它包括硬件(如数据采集卡、信号调理器)和软件(如数据采集软件、数据处理算法)两部分。信号调理:将传感器输出的模拟信号转换为适合AD转换的信号。AD转换:将模拟信号转换为数字信号。数据传输:将数字信号传输到控制系统或上位机。存储:将采集的数据存储在本地或远程数据库中。实时性:保证数据的实时性和准确性。压力传感器的数据采集与处理是工业自动化中不可或缺的一部分。

2401_87715305的博客 1621

在 AS ABAP 7.40 SP05 里把 HANA 存储过程纳入 ABAP 生命周期:AMDP 实战示例与踩坑笔记

文章摘要:AMDP(ABAP Managed Database Procedures)是SAP推出的框架,用于在ABAP中管理数据库端的存储过程或函数,特别适用于HANA数据库。它通过将数据库语言(如SQLScript)嵌入ABAP方法,实现数据处理逻辑的"下推"(code pushdown),减少应用层与数据库间的数据传输。AMDP适用于需要数据库特有能力或大规模数据处理的场景,但应优先考虑Open SQL或ABAP CDS等更简单的方案。开发时需注意数据库类型检查、参数前缀(:)等语

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 225

Java之Excel导出工具类使用教程

本工具类经过PostMan和web页面严格测试可用,经过了多个版本迭代优化,可以直接使用,也方便大家根据自己的业务需求,修改定制自己的导出工具。 市面上有很多封装好的导出工具(如:阿里的easyExcel,GitHub上xxl-excel等),但如果直接引用依赖,扩展性和定制性比较差,所以博主通过apache.poi,自己实现一款Excel导出工具,方便定制使用。

五道口 1万+

【EMC专题】为什么芯片规格书ESD性能中看不到MM(机器放电模型)

器件级ESD包括三种类型,HBM人体放电模型、MM机械放电模型和CDM元件充电模型。但在芯片规格书中为什么只见到HBM模型与CDM模型,却没有看到MM模型的数据?

一点硬件 452

导出excel工具类

1、excel工具类代码如下 package com.senta.mdt.common.util; import com.senta.mdt.api.mdtvisit.controller.ExcelController; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.HorizontalAl...

ourLang 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JAVA导出Excel的工具类

JAVA导出Excel的工具类 /** *标记的步骤一到十二是主要要用的方法,我是将自己写需求时的代码直接复制过来的,所以当中会穿插 *一些我自己的需求方面的代码,做此博文,是方便以后自己用 * * */ import com.qf.entity.Hosregister; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apac...

灵魂和肉体总要有一个在路上 1576

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java Excel导出工具类

自己学习一下,Excel导出工具类

jiu_mu_mu的博客 1986

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java实现 Excel导出工具类

导出工具类 list * 要导出的数据集 * fileName * 模板名称 * exportName * 下载文件名 * rowIndex * 行号下标,从0开始。 * alis * 字段别名–数组 * public void exportExcel(HttpServletRe...

T 691

excel导入导出工具类

使用java导出导入excel工具类 文章目录使用java导出导入excel工具类导出导出工具类导入工具类1工具类2 导出 /** * * @return */ @Override public File exportLogInfo() { Map<String,Object> resultMap = new HashMap<String, Object>(); String sqlExceptSelect

qq_24790827的博客 1701

java实现的导出Excel工具类

不知不觉一个多月没更新博客了,因为这段时间博主辞职了,过着醉生梦死般的生活。哈哈哈哈 今天开始正式入职新公司,翻看着公司以前写好的项目,准备熟悉一下业务以及代码风格,不知道怎么回事,越看越蛋疼,代码里充斥着大量重复的逻辑功能。还有就是莫名其妙就会有中文首字母缩写的变量名、方法名、文件名。崩溃。(谷歌翻译,百度翻译是个好东西)。然后最后重点关注了一下util工具类这个包,哎,工具类真的太少了,由此...

hz90s的博客 5090

java 封装poi导出excel的工具类,根据参数生成excel

用到过好几次的poi,之前用的时候时间赶都是直接写一个特定的方法导出一个特定的excel,一直想总结一个poi导出excel的工具类,主要的问题是怎么把excel表格的列头以及列表数据对应出来。(springboot下载文件demo)

新林的博客 961

HuTool工具类使用之Excel文档的导入导出

HuTool工具类使用Excel文档的导入导出 前言 在日常的工作开发中,Excel的导入和导出是必不可少的,如果自己写相应的导入导出方法,会显得十分繁琐,本文采用Hutool工具类实现的Excel导入导出功能,可以大幅度减少今后开发中Excel的导入导出的相关操作。 提示:以下是本篇文章正文内容,下面案例可供参考 一、Hutool是什么?       Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,

一直扫地僧 1万+

Excel导出工具类

该工具类用于导出列表 import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWork...

MRZHQ的博客 358

Excel 导入导出工具类文档

ExcelProperty("员工ID")@ExcelProperty("员工姓名")@ExcelProperty(value = "入职日期", dateFormat = "yyyy年MM月dd日")@ExcelProperty("薪资")@ExcelProperty("是否在职")// 省略 getter/setter开箱即用:简单注解配置即可实现复杂导入导出功能高度可定制:支持自定义列名、日期格式、列宽等智能类型转换:自动处理常见数据类型转换企业级健壮性。

qq_37935324的博客 2525

Java Excel通用导出工具类

最近经常用到excel导出,整理了一下代码,写了个工具类 用到的jar包 POI3.17 package com.example.excel; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.formula.functions.T; import org.apache.poi.ss.usermodel.Border...

qq_40548741的博客 5万+

Java poi 实现excel导入导出工具类

最近项目上又要大量的涉及excel导入导出,网上各种导入导出的方式层出不穷,我是比较青睐官方的poi,但是要自己去操作工作簿对象自己一行一行的读取,会有很多的重复代码,重复劳动,也极为不美观,基于合成/聚合复用程序设计原则,降低耦合,所以提出来基于poi写了这套工具类。以前也写过类似的工具类,由于项目进度问题,没写博客记录,导致这次用的时候找不到了(此处捂脸一分钟),于是痛定思痛,又封装了这一套,写完赶紧写个博客记录下,方便自己以后有需要时查阅,如得各位大佬享用,荣幸之至,所有方法已在项目中验证,可直接使用

百块富翁的博客 8648

Excel导入导出工具类

Excel导出工具类 如果数据条数大于单张sheet的最大条数,会自动创建第二张sheet表单,如果有不懂的可以留言问我。 package com.itl.framework.utils; import com.itl.pojo.tms.TmDemandExportDto; import org.apache.poi.hssf.usermodel.HSSFCell; import org.a...

一丛小溪的博客 326
上一篇: ThreadLocal源码分析
下一篇: gts分布式事务框架踩坑记录
Yuwen_forJava
博客等级 码龄9年 28粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值