当前位置: 首页 > news >正文

写一个简单实用的Excel工具类

我们在开发中经常要将数据导入成Excel表格供展示,也需要解析Excel中的数据,官方提供的api操作太麻烦,这边封装了一个Excel工具类,可以很轻松的实现Excel的操作

首先加入依赖

<dependencies><!-- EasyPoi 基本库依赖 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.2.0</version></dependency><!-- EasyPoi 注解库依赖 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.2.0</version></dependency><!-- EasyPoi Web 库依赖 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.2.0</version></dependency>
</dependencies>

介绍如下

EasyPoi 是一个用于处理 Excel 文件的 Java 库,它提供了各种功能,包括读取和写入 Excel 文件,支持不同的 Excel 格式,以及用于生成 
Excel 报表的工具;这些库依赖项用于在 Java 项目中引入 EasyPoi 的相关功能,以便于可以在应用程序中轻松地处理 Excel 文件;通过添加这些
依赖,可以在项目中使用 EasyPoi 提供的功能来操作 Excel 文件

接下来实现工具类

public class ExcelUtils {/*** 根据数据生成excel表格,并将其写入HttpServletResponse。** @param name                Excel文件名* @param title               表格标题* @param entityClass         数据对象的类* @param list                数据列表* @param httpServletResponse 用于响应的HttpServletResponse对象*/public static void toExcelList(String name, String title, Class<?> entityClass, List<?> list, HttpServletResponse httpServletResponse) {// 创建导出参数对象ExportParams exportParams = new ExportParams();// 设置导出参数的工作表名称为传入的titleexportParams.setSheetName(title);   // 使用EasyPoi库来导出Excel,生成一个Workbook对象Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityClass, list);// 响应生成的Excel文件给客户端responseExcel(name, httpServletResponse, workbook);}/*** 将生成的Excel表格保存到本地文件。** @param filepath    目标文件路径* @param title       Excel标题* @param entityClass 数据对象的类* @param list        数据列表* @throws Exception 如果保存文件时发生异常*/public static void fileExcel(String filepath, String title, Class<?> entityClass, List<?> list) throws Exception {// 创建导出参数对象ExportParams params = new ExportParams();// 设置Excel文件类型为XLSXparams.setType(ExcelType.XSSF);  // 设置工作表名称为传入的titleparams.setSheetName(title);  try {// 使用EasyPoi库来导出Excel,生成一个Workbook对象Workbook workbook = ExcelExportUtil.exportExcel(params, entityClass, list);// 将生成的Excel写入到文件FileOutputStream fileOutputStream = new FileOutputStream(filepath);// 将Workbook对象写入到文件输出流中workbook.write(fileOutputStream);  } catch (Exception e) {// 抛出运行时异常throw new Exception("Excel导出失败: " + e.getMessage(), e);  // 抛出异常并包含错误消息}}/*** 解析Excel表格为List对象** @param multipartFile 文件上传对象* @param clazz         返回值类型的Class对象* @return 表格数据的List* @throws Exception 如果解析过程中发生异常*/public static List<?> excelToList(MultipartFile multipartFile, Class<?> clazz) throws Exception {// 创建Excel导入参数对象ImportParams params = new ImportParams();// 设置Excel文件中标题所占的行数,setTitleRows(0)表示Excel文件中没有标题行params.setTitleRows(0);// 设置Excel文件中表头(列名)所占的行数,setHeadRows(1)表示第一行包含了表头信息params.setHeadRows(1);// 使用EasyExcel工具类导入Excel数据并返回List对象return ExcelImportUtil.importExcel(multipartFile.getInputStream(), clazz, params);}/*** 将Excel表格写入响应体输出** @param name                Excel文件名* @param httpServletResponse 响应体对象* @param workbook            Excel工作簿对象*/public static void responseExcel(String name, HttpServletResponse httpServletResponse, Workbook workbook) {try {// 对文件名进行URL编码,处理可能的特殊字符name = URLEncoder.encode(name, "UTF-8");// 设置响应的字符编码为UTF-8,以确保处理中文字符正确httpServletResponse.setCharacterEncoding("UTF-8");// 设置响应的Content-Type头,指定响应内容的类型为二进制流httpServletResponse.setHeader("Content-Type", "application/octet-stream");// 设置Content-Disposition头,提示浏览器以附件形式下载文件,并指定下载的文件名httpServletResponse.setHeader("Content-Disposition", "attachment; filename=" + name);// 将Workbook对象的内容写入HttpServletResponse的输出流,实现文件下载workbook.write(httpServletResponse.getOutputStream());} catch (UnsupportedEncodingException e) {// 抛出运行时异常,处理不支持的字符编码异常throw new RuntimeException(e);} catch (IOException e) {// 抛出运行时异常,处理文件输出异常throw new RuntimeException(e);}}
}

这个工具类可以直接copy下来,这样就能简单的实现Excel的功能

相关文章:

写一个简单实用的Excel工具类

我们在开发中经常要将数据导入成Excel表格供展示&#xff0c;也需要解析Excel中的数据&#xff0c;官方提供的api操作太麻烦&#xff0c;这边封装了一个Excel工具类&#xff0c;可以很轻松的实现Excel的操作 首先加入依赖 <dependencies><!-- EasyPoi 基本库依赖 --…...

C#中LINQtoObjects、LINQtoDataSet和LINQtoXML

目录 一、使用LINQ操作数组和集合 二、使用LINQ操作DataSet数据集 1.AsEnumerable()方法 2.CopyToDataTable()方法 3.AsDataView()方法 4.Take()方法 5.Sum()方法 6.示例 &#xff08;1&#xff09;源码 &#xff08;2&#xff09;生成效果 三、使用LINQ操作XML 1.…...

k8s中 RBAC中,clusterrole,serviceaccount , rolebinding 是什么关系谁先谁后

在Kubernetes的RBAC&#xff08;Role-Based Access Control&#xff09;中&#xff0c;ClusterRole、ServiceAccount和RoleBinding是三个关键的组件&#xff0c;它们之间的关系如下&#xff1a; ClusterRole&#xff1a;ClusterRole 是一种全局的权限规则&#xff0c;它定义了一…...

什么是文件安全

文件安全就是通过实施严格的访问控制措施和完美的权限卫生来保护您的业务关键信息不被窥探&#xff0c;除了启用和监控安全访问控制外&#xff0c;整理数据存储在保护文件方面也起着重要作用。通过清除旧的、过时的和其他垃圾文件来定期优化文件存储&#xff0c;以专注于关键业…...

maven的settings.xml和pom.xml配置文件详解

一、配置文件 maven的配置文件主要有 settings.xml 和pom.xml 两个文件。 其中在maven安装目录下的settings.xml&#xff0c;如&#xff1a;D:\Program Files\apache-maven-3.6.3\conf\settings.xml 是全局配置文件 用户目录的.m2子目录下的settings.xml&#xff0c;如&#…...

YB2503HV 100V 3A SOP8内置MOS 高效率降压IC(昱灿)

YB2503HV 100V 3A SOP8内置MOS 高效率降压IC 描述&#xff1a; YB2503HV是单片集成可设定输出电流的开关型降压恒压驱动器&#xff0c;可工作在宽输入电压范围具有优良的负载和线性调整度。安全保护机制包括每周期的峰值限流、软启动、过压保护和温度保护。YB2503HV需要非常少…...

Redis安装Linux

1、下载安装包 wget http://download.redis.io/releases/redis-3.0.0.tar.gz 2、安装 mkdir /usr/local/redis cp redis-3.0.0.tar.gz /usr/local/redis cd /usr/local/redis tar -zxvf redis-3.0.0.tar.gz cd /usr/local/redis/redis-3.0.0 make PREFIX/usr/local/red…...

PCL点云处理(007)-Ransac

随机抽样一致性算法RANSAC(Random sample consensus)是一种迭代的方法来从一系列包含有离异值的数据中计算数学模型参数的方法。 RANSAC算法本质上由两步组成&#xff0c;不断进行循环&#xff1a; 从输入数据中随机选出能组成数学模型的最小数目的元素&#xff0c;使用这些元素…...

有方N58 HTTP POST 请求连接 TDengine

串口调试软件&#xff1a;格西调试精灵 第一步先注册网络获取IP地址 建立PPP连接 ATXIIC1\r PPP链路建立成功&#xff0c;查询IP地址 ATXIIC?\r 设置网络APN ATCREG?\r 运行结果&#xff0c;红线处是获…...

基于Python+Pygame实现一个滑雪小游戏

目录 项目介绍Pygame介绍项目文件夹介绍演示视频代码免费领取 一、项目介绍 使用介绍&#xff1a;运行main.py文件后&#xff0c;通过左右按键可以控制小人的移动&#xff0c;如果经过旗杆那么10分&#xff0c;如果碰到树木那么减50分。 二、Pygame介绍 Pygame是一个用于游…...

【限制输入框值类型】自定义指令el-input输入类型限制,vue和html两个版本

前言 经常遇到输入框需要限制只能输入数字的&#xff0c; 因为用户很离谱&#xff0c;明显输入数字的地方他非要输入英文或者中文 但是用到UI框架或者自己写方法验证表单比较麻烦 为了一个输入框专门去弄一个验证很麻烦 所以这里就整合了两种自定义指令的方式&#xff0c;更加…...

对一个金融风控测额公式的理解(1)

目录 公式&#xff1a;&#xff08;近3个月回款总额/过去3个月的FBA平均库存价值&#xff09;*最近FBA的库存价值*过去13周FBA发货比例 详细讨论一下这个&#xff1a;&#xff08;近3个月回款总额/过去3个月的FBA平均库存价值&#xff09; 既然&#xff08;近3个月回款总额/…...

【GEE】2、探索数据集

1简介 在本单元中&#xff0c;我们将讨论以下概念&#xff1a; Google 地球引擎中可用的潜在数据来源。 通过生态示例显示的数据集采样用例。 如何使用 Google 地球引擎访问重要的元数据。 2背景 要将遥感集成到您的研究和分析中&#xff0c;学习如何解析 Google 地球引擎上…...

开发一款直播弹幕游戏需要多少钱?

开发一款直播弹幕游戏需要多少钱&#xff1f;有好多朋友在咨询过弹幕游戏的开发价格后&#xff0c;都会比较吃惊&#xff0c;一款体量这么小的游戏为什么动辄就要几万块甚至十几万&#xff1f; 我来给你们说分析一下原因&#xff0c;这种游戏如果脱离开直播间&#xff0c;可以…...

STM32F103C8T6第一天:认识STM32 标准库与HAL库 GPIO口 推挽输出与开漏输出

1. 课程概述&#xff08;297.1&#xff09; 课程要求&#xff1a;C语言熟练&#xff0c;提前学完 C51 2. 开发软件Keil5的安装&#xff08;298.2&#xff09; 开发环境的安装 编程语言&#xff1a;C语言需要安装的软件有两个&#xff1a;Keil5 和 STM32CubeMX Keil5 的安装…...

selenium元素定位 —— 提高篇 CSS定位元素

CSS (Cascading Style Sheets) 是一种用于渲染 HTML 或者 XML 文档的语言&#xff0c;CSS 利用其选择器可以将样式属性绑定到文档中的指定元素。理论上说无论一个元素定位有多复杂都能够定位到元素。 因为不同的浏览器 XPath 引擎不同甚至没有自己的 Xpath 引擎&#xff0c;这…...

隔离和非隔离电源的区别

一、电源隔离与非隔离 电源的隔离与非隔离&#xff0c;主要是针对开关电源而言&#xff0c;业内比较通用的看法是&#xff1a; 1、隔离电源&#xff1a;电源的输入回路和输出回路之间没有直接的电气连接&#xff0c;输入和输出之间是绝缘的高阻态&#xff0c;没有电流回路。 …...

C语言自定义数据类型

一、构造数据类型 构造数据类型&#xff1a;用户自己建立的数据类型&#xff08;自定义数据类型&#xff09; C语言中的自定义数据类型有&#xff1a;数组类型、结构体类型、共用体类型和枚举类型。 1.1. 结构体 C语言允许用户根据需要自己建立的由不同类型数据组成的组合型…...

SoftwareTest5 - 你就只知道功能测试吗 ?

你就只知道功能测试吗 ? 一 . 按照测试对象划分1.1 文档测试1.2 可靠性测试1.3 容错性测试1.4 安装卸载测试1.5 内存泄漏测试1.6 弱网测试 二 . 按是否查看代码划分2.1 黑盒测试2.2 白盒测试2.3 灰盒测试 三 . 按照开发阶段划分3.1 单元测试3.2 集成测试3.3 冒烟测试3.4 系统测…...

Uniapp 中,能够同时兼容H5、web、app、微信小程序的引入高德地图的语法格式

在 Uniapp 中&#xff0c;可以通过使用 uni-app 统一的 API 来同时兼容 H5、web、App 和微信小程序&#xff0c;而引入高德地图则有以下两种语法格式供选择&#xff1a; 使用 Vue.js 的语法格式&#xff1a; <template><view><map :longitude"longitude&…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...