Spring Boot 集成 POI
Spring Boot 集合 POI
Apache POI 官站:https://poi.apache.org/
基础概念
Apache POI 是一个开源项目,提供 Java API 用于操作 Microsoft Office 文件格式。Apache POI 对 Excel 文件的处理分为两个主要类库:
- HSSF (Horrible Spreadsheet Format):用于处理 Excel 97-2003 文件格式 (.xls)。
- XSSF (XML Spreadsheet Format):用于处理 Excel 2007 及以上版本文件格式 (.xlsx)。
具体到 Excel 文件的处理,POI 提供了一些核心对象以支持对工作簿、工作表、单元格的操作:
- Workbook:表示一个 Excel 文件。
- Sheet:表示一个工作表,可以包含多个 Sheet。
- Row:表示工作表中的一行。
- Cell:表示行中的一个单元格。
添加依赖
<!-- 引入【Apache POI】依赖 集成POI操作excel使用-->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.1</version>
</dependency>
POI 写操作
简单写入导出
@Test
public void easyOutPutExcelTest() throws Exception {// 1. 创建 Excel 文件(工作簿)XSSFWorkbook workbook = new XSSFWorkbook();//2.创建工作表(并给sheet取名”)XSSFSheet sheet = workbook.createSheet("大铁锤de数据表");// 3.创建excel行,填充数据(示例)XSSFRow row = sheet.createRow(0);row.createCell(0).setCellValue("时间");row.createCell(1).setCellValue(DateUtils.getDateString());XSSFRow row1 = sheet.createRow(1);row1.createCell(0).setCellValue("地点");row1.createCell(1).setCellValue("深圳市南山区");// 3. 获取桌面路径(Windows/Mac/Linux 通用)String desktopPath = System.getProperty("user.home") + "/Desktop/大铁锤de数据表.xlsx";// 4. 保存到桌面try (FileOutputStream outputStream = new FileOutputStream(desktopPath)) {workbook.write(outputStream);}workbook.close();System.out.println("文件已保存到桌面!");
}
自定义写入导出
@Test
public void testCustomWriteExportExcel() {//获取下载路径(Windows/Mac/Linux 通用)String desktopPath = System.getProperty("user.home") + "/Desktop/自定义写入导出.xlsx";try (XSSFWorkbook workbook = new XSSFWorkbook();FileOutputStream fileOut = new FileOutputStream(desktopPath)) {XSSFSheet sheet = workbook.createSheet();//创建表头行XSSFRow headerRow = sheet.createRow(0);//创建表头单元格样式XSSFCellStyle headerStyle = workbook.createCellStyle();//设置背景色 - 使用RGB颜色headerStyle.setFillForegroundColor(new XSSFColor(new byte[]{(byte) 255, (byte) 184, (byte) 77}, null));headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//创建字体XSSFFont headerFont = workbook.createFont();headerFont.setBold(true);headerStyle.setFont(headerFont);// 创建表头单元格并应用样式String[] headers = {"编号", "姓名", "年龄", "工作", "地址"};for (int i = 0; i < headers.length; i++) {XSSFCell cell = headerRow.createCell(i);cell.setCellValue(headers[i]);cell.setCellStyle(headerStyle);}workbook.write(fileOut);System.out.println("文件已保存到桌面!");} catch (IOException e) {e.printStackTrace();}
}
大量数据写入导出
@Test
public void writBigDataTestSuper() throws Exception{long begin = System.currentTimeMillis();//1.创建工作簿 SXSSFWorkbook——(耗时比较短,适合大量数据操作)SXSSFWorkbook workbook = new SXSSFWorkbook();//创建工作表SXSSFSheet sheet = workbook.createSheet();for (int rowNum = 0; rowNum < 100000; rowNum++) {SXSSFRow row = sheet.createRow(rowNum);row.createCell(0).setCellValue("时间");row.createCell(1).setCellValue(DateUtils.getDateString());}String desktopPath = System.getProperty("user.home") + "/Desktop/大铁锤大数据表.xlsx";try (FileOutputStream outputStream = new FileOutputStream(desktopPath)) {workbook.write(outputStream);} catch (IOException e) {e.printStackTrace();} finally {workbook.close(); // ✅ 清理临时文件,确保 workbook 被关闭(即使在写入时发生异常)}long end = System.currentTimeMillis();System.out.println("文件已保存到桌面!使用【SXSSFWorkbook】工作簿耗时:"+(double)(end-begin)/1000+"秒");
}
POI 读操作
简单导入操作
@Test
public void easyReadDateExcelTest() throws IOException {//获取文件流FileInputStream inputStream = new FileInputStream(System.getProperty("user.home") + "/Desktop/大铁锤de数据表.xlsx");//1.创建一个工作簿,使用excel 能操作的都可以在HSSFWorkbook对象中设置try (Workbook workbook = new XSSFWorkbook(inputStream)) {//得到表Sheet sheet = workbook.getSheetAt(0);//得到行Row row = sheet.getRow(0);//得到列Cell cell = row.getCell(1);//获取垓值System.out.println(cell.getStringCellValue());inputStream.close();}
}
常用注解
CellType 枚举类注释
枚举值 | 值 | 含义 |
---|---|---|
_NONE | -1 | 内部保留类型(不直接对应 Excel 单元格类型,POI 内部使用) |
NUMERIC | 0 | 数值类型(包括整数、小数、日期/时间等,Excel 中日期存储为数值) |
STRING | 1 | 字符串类型(通过 setCellValue("text") 设置的文本,或富文本单元格) |
FORMULA | 2 | 公式类型(单元格包含公式,如 =A1+B1 ,通过 getCachedFormulaResultType() 获取结果类型) |
BLANK | 3 | 空白单元格(无内容,但可能有格式,如背景色) |
BOOLEAN | 4 | 布尔类型(值为 TRUE 或 FALSE ) |
ERROR | 5 | 错误值类型(如 #VALUE! 、#DIV/0! 等错误码) |
相关文章:
Spring Boot 集成 POI
Spring Boot 集合 POI Apache POI 官站:https://poi.apache.org/ 基础概念 Apache POI 是一个开源项目,提供 Java API 用于操作 Microsoft Office 文件格式。Apache POI 对 Excel 文件的处理分为两个主要类库: HSSF (Horrible Spreadsheet …...
8个方向使用DeepSeek打磨完美课题申报书!
一份出色的课题申报书,往往就是项目获批的关键。撰写高质量课题申报书绝非易事,它需要您在选题切入点、研究价值论证、技术路线设计、团队优势呈现、经费规划和预期成果等多维度进行精心布局,确保论证有力、重点突出、结构清晰。 本文为您提供…...
Leetcode 34.在排序数组中查找元素的第一个和最后一个位置
题目描述 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 考察二…...
ctfshow VIP题目限免 密码逻辑脆弱
根据题目提示:公开的信息比如邮箱,可能造成信息泄露,产生严重后果 在页面上找一个邮箱号 从 QQ 上面搜索这个 QQ号,发现是一个叫大牛的人,地区是陕西西安 然后我们拼接访问 /admin 发现了一个后台登录系统的页面&…...
C++初级入门学习
数据结构初级部分的学习我们已经学完了,接下来就进入C初阶部分的学习,因为数据结构的高阶部分要用到C才能够更好的理解并书写,所以我们要先学习C,初阶部分学完就能继续学习我们对数据结构了。好了,直接进入今天的主题吧…...
2025年汽车加气站操作工证考试内容
汽车加气站操作工证是从事汽车加气站相关操作工作的人员需要考取的资格证书 考试内容 理论知识:包括加气站的工艺流程、设备原理、安全操作规程、气体性质、消防知识、环境保护等方面的知识。例如,需要了解压缩天然气或液化天然气的储存、运输和加注流…...
python爬虫:喜马拉雅案例(破解sign值)
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关ÿ…...
嵌入式AI前沿:精选工具与应用网站解析
1. Edge Impulse 网址:https://www.edgeimpulse.com/核心内容: 提供端到端的嵌入式AI开发平台,简化从数据收集到模型训练再到部署的全流程。支持多模态数据处理(音频、视觉、运动等),并优化模型以在资源受…...
【论文精读】Multi-scale Neighbourhood Feature Interaction Network
摘要(ABSTRACT) 光伏发电是工业领域的关键组成部分,其能量转换效率受光伏电池表面缺陷的显著影响。近年来,深度学习模型的广泛应用推动了缺陷检测技术的进步。然而,由于光伏电池缺陷尺寸差异较大(尤其是微…...
C++ 蓝桥云课代码练习
代码一 ,小明的背包1,代码见下 #include <iostream> #include <cstring> using namespace std;#define maxn 110 #define maxm 1001 #define inf -1int w[maxn], v[maxn]; int dp[maxn][maxm];int main() {memset(dp, inf, sizeof(dp));dp[…...
微软庆祝它成立整整50周年
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
android 启动四大组件
在 Android 开发中,启动通常是指启动一个 Activity、Service、BroadcastReceiver 或其他组件。以下是一些常见的启动方式: 1. 启动一个 Activity 要启动一个 Activity,可以使用 Intent。以下是一个示例代码: 示例:启…...
C# 串口通信
1. 导入 using System.IO.Ports;2. 初始化定义 SerialPort sp new SerialPort(); // 设置串口 sp.PortName "COM3"; // 串口 sp.BaudRate 9600; // 波特率 sp.Parity Parity.None; // 校验位 sp.DataBits 8; // 数据位 sp.StopBits StopBits.One; // 停…...
Spring事务详解
一、Spring对事务的支持 1.事务概述 什么是事务 在一个业务流程当中,通常需要多条DML(insert delete update)语句共同联合才能完成,这多条DML语句必须同时成功,或者同时失败,这样才能保证数据的安全。 多…...
单片机FreeRTOSTickless低功耗模式应用示例
Tickless低功耗模式在很多需要延长电池寿命或减少能耗的场景中非常有用,特别是在那些大部分时间处于空闲状态的系统中。 以下是一些使用Tickless模式的场景和例子: 1.传感器节点在物联网(IoT)中,许多传感器节点需要长…...
2025.4.9总结
今天周三,晚上默认不加班,每到闲暇的时候,总会瞎想。 如今想想,是要多提升提升自身的软实力了。硬实力,是你的专业技能,是你吃饭的东西,而软实力则体现在人际交往,表达能力等方面。…...
Ceph异地数据同步之-Cephfs异地同步复制
#作者:闫乾苓 文章目录 1.核心原理2.部署步骤3.cephfs同步测试4.查看cephfs文件同步状态5.优化cephfs文件系统同步的时间间隔 1.核心原理 Cephfs异地同步基于CephFS-mirror,其工作原理是基于CephFS的快照功能和cephfs-mirror工具的异步复制机制。它通过…...
大数据专业学习路线
大数据专业学习路线 目录 基础知识核心技术进阶技能实战项目职业发展学习资源学习计划常见问题 1. 基础知识 1.1 编程语言 Python:大数据分析的基础语言 基础语法和数据类型函数和模块面向对象编程文件操作和异常处理常用库:NumPy, Pandas, Matplot…...
每日文献(十)——Part two
今天从第四部分 级联RCNN开始介绍。 目录 四、级联RCNN 4.1 级联边界框回归 4.2 级联检测 五、实验结果 5.1 实现细节 5.1.1 基准工作 5.2 质量不匹配 5.3 与迭代bbox和积分损失的比较 5.4 消融实验 5.5 与最先进的方法对比 5.6 泛化能力 5.7 PASCAL VOC数据集结果…...
8.3.1 MenuStrip(菜单)控件
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 MenuStrip控件提供了程序窗体的主菜单,即显示于窗体顶端部分的菜单。 MenuStrip常用属性: ImageScalingSize…...
仿真每日一练 | ABAQUS子程序DLOAD
ABAQUS中用户子程序DLOAD可用于定义分布载荷幅值随坐标、时间、单元编号、积分点编号等的变化,该功能主要应用于定义复杂的载荷工况,今天给大家举一个简单的例子介绍其使用方式: 图1 模型认识 回顾一下ABAQUS的有限元分析流程: 图…...
Kubernetes(k8s)-备份Etcd介绍
作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是K…...
[leetcode]求最大公约数和最小公倍数(gcd和lcm算法)
求最大公约数和最小公倍数 Coding : 使用C的库 #include<iostream> #include<algorithm> using namespace std; int main() { int a, b; cout << "cin a and b of gcd : "; cin >> a >> b; int res __gcd(a, b);…...
B-tree 的原理源码分析及应用场景等
B-tree(B树)是一种自平衡的多路搜索树,广泛用于文件系统、数据库索引、键值存储系统等对大规模数据的高效插入、查找和删除有高要求的场景。相比于二叉搜索树(BST),B-tree 可以减少磁盘I/O次数,…...
MySQL 中的聚簇索引和非聚簇索引有什么区别?
MySQL 中的聚簇索引和非聚簇索引有什么区别? 1. 从不同存储引擎去考虑 在MySIAM存储引擎中,索引和数据是分开存储的,包括主键索引在内的所有索引都是“非聚簇”的,每个索引的叶子节点存储的是数据记录的物理地址(指针…...
重构居家养老安全网:从 “被动响应” 到 “主动守护”
随着全球老龄化加剧,居家养老安全成为社会关注的核心议题。 传统养老模式依赖人工巡检或单一传感器,存在响应滞后、隐私泄露、场景覆盖不足等问题。 由此智绅科技应运而生,七彩喜智慧养老系统构筑居家养老安全网。 而物联网(Io…...
从静态绑定驱动模型到现代设备模型 —— 一次驱动架构的进化之旅
🔍 B站相应的视屏教程: 📌 内核:博文视频 - 从静态绑定驱动模型到现代设备模型 在 Linux 内核的发展历程中,设备驱动结构经历了从"硬编码 手动注册"的早期实现方式,到"设备模型统一管理&qu…...
MySQL学习笔记十五
第十七章组合查询 17.1组合查询 MySQL允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)或复合查询(compound query)。 以下几种情况需要使…...
NLP基础知识 与 词向量的转化方法 发展
目录 1.NLP 基础知识点 为什么需要自然语言处理? 自然语言处理有哪些分类? 自然语言处理有哪些实际应用? 为什么需要自然语言处理? 自然语言处理有哪些分类? 自然语言处理有哪些实际应用? 自然语言处理的技术/工作原理是什么? 2.NLP文本转化为词向量的方法 2…...
VectorBT量化入门系列:第四章 高级策略开发与优化
VectorBT量化入门系列:第四章 高级策略开发与优化 本教程专为中高级开发者设计,系统讲解VectorBT技术在量化交易中的应用。通过结合Tushare数据源和TA-Lib技术指标,深度探索策略开发、回测优化与风险评估的核心方法。从数据获取到策略部署&am…...
JVM虚拟机篇(七):JVM垃圾回收器全面解析与G1深度探秘及四种引用详解
JVM垃圾回收器全面解析与G1深度探秘及四种引用详解 JVM虚拟机(七):JVM垃圾回收器全面解析与G1深度探秘及四种引用详解一、JVM有哪些垃圾回收器1. Serial回收器2. ParNew回收器3. Parallel Scavenge回收器4. Serial Old回收器5. Parallel Old回…...
【蓝桥杯】15届JAVA研究生组F回文字符串
一、思路 1.这题去年考的时候想的是使用全排列进行尝试,实际不用这么麻烦,只用找到第一个和最后一个非特殊字符串的位置,然后分别向内检查是否对称,向外检查是否对称直到左指针小于0(可以通过添加使其对称) 2.至于如何找到第一个…...
TDengine 语言连接器(Python )
简介 taospy 是 TDengine 数据库面向 Python 语言提供的官方连接器,连接器对外提供对数据库写入、查询、订阅等多种访问接口。 安装连接器命令如下: # 原生连接和 REST 连接 pip3 install taospy# WebSocket 连接,可选装 pip3 install tao…...
Android compose源码浅析——Modifier
Modifier浅析 Modifier的使用foldOutfoldInanyall总结Modifier的使用 先来一段代码1: @Preview(showBackground = true) @Composable fun GreetingPreview() {ComposeTestTheme {Box(modifier = Modifier.size(DpSize(Dp(100f),Dp(100f))).padding(Dp(10f)).background(Colo…...
基于机器视觉的多孔零件边缘缺陷检测(源码C++、opencv、凸包、凸缺陷检测)
👑主页:吾名招财 👓简介:工科学硕,研究方向机器视觉,爱好较广泛… 💫签名:面朝大海,春暖花开! 基于机器视觉的多孔零件边缘缺陷检测(源码C、ope…...
JAVAWeb_Servlet:前置准备与理论简易介绍
要写JAVA_Web:首先就得建个项目——如何在Eclipse新建一个Web项目-CSDN博客 然后我们考虑具体的代码细节(接下来就是我们的前置准备) 一、导包: 在 Eclipse 中,如果需要快速导入缺失的包(例如࿰…...
反射 tcp
反射 临时越过权限 获取成员变量1并进行修改 成员方法 TCP客户端...
UML综合实验四
1. 计算机包含内存(RAM)、CPU等硬件设备,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图。 2. 电脑组装工厂可以将CPU、内存、硬盘、主机、显示器等硬件设备组装在一起构成一台完整的电脑,…...
<《AI大模型应知应会100篇》第8篇:大模型的知识获取方式及其局限性
第8篇:大模型的知识获取方式及其局限性 摘要 大模型(如GPT、BERT、Qwen、DeepSeek等)凭借其卓越的自然语言处理能力,已经成为人工智能领域的明星。然而,这些模型“知道”什么?它们如何获取知识?…...
【回眸】Linux 内核 (十六) 之 多线程编程 下
前言 前面介绍了互斥锁,本篇博文介绍死锁及其他多线程遇到的情况。 什么情况会造成死锁 死锁指的是两个或两个以上的运算单元(进程、线程或协程),互相持有对方所需的资源,导致它们都无法向前推进,从而导…...
学习笔记083——Java Stream API
文章目录 1、过滤数据 filter()2、转换元素 map()3、排序 sorted()3.1、自定义排序规则 4、去重 distinct()5、限制元素数量 limit()6、收集结果 collect()6.1、收集为List6.2、收集为Set6.3、转为Map6.4、基本用法(注意键冲突会抛异常)6.5、处理键冲突&…...
逍遥模拟器ARM过检测技术全解析
逍遥模拟器ARM框架安装magisk和修改设备型号隐藏应用隐藏root过检测 逍遥模拟器ARMmagisk改设备型号隐藏应用隐藏root 引言 逍遥模拟器以其出色的性能和丰富的功能,深受广大用户喜爱,让用户能在电脑上轻松运行各类安卓应用和游戏。然而,为保…...
Easysearch VS Opensearch 数据写入与存储性能对比
本文记录 Easysearch 和 Opensearch 数据写入和数据存储方面的性能对比。 准备 压测工具:INFINI Loadgen 对比版本: Easysearch 1.11.1(lucene 8.11.4)Opensearch 2.19.1(lucene 9.12.1) 节点 JVM 配置…...
C++中STL学习(一)——向量、栈、堆、集合
#include “bits/stdc.h” using namespace std; int main() { // -------------------- 1、向量vector:可以替换数组,不需要事先指定长度 // ------------------------- vector arr; // 构建int数组 vector arr1(100); // 构建初始长度100的int向量 ve…...
柑橘病虫害图像分类数据集OrangeFruitDataset-8600
文章目录 1. 前言2. 数据类别介绍3. 数据集地址 1. 前言 柑橘,作为水果界的 “宠儿”,不仅以其酸甜可口的味道深受大众喜爱,更是在全球水果产业中占据着举足轻重的地位。无论是早餐中的一杯橙汁,还是下午茶里的柑橘甜点ÿ…...
leetcode刷题-单调栈
代码随想录单调栈|739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II、42. 接雨水、84.柱状图中最大的矩形 739. 每日温度496.下一个更大元素 I503.下一个更大元素II42. 接雨水 -- 面试常考题84.柱状图中最大的矩形 739. 每日温度 leetcode题目链接 代码随想录文档讲…...
【设计模式】访问者模式
**简介 假设你有一个购物车(对象结构),里面有多种商品(元素),如苹果、牛奶、书籍。每个商品的计价规则不同: 水果按重量计价牛奶按数量计价书籍按固定价格计价 现在需要实现两种功能࿱…...
【ISP】ISP pipeline(AI)
ISP Pipeline 全流程概览 ISP(Image Signal Processing,图像信号处理)流程通常从原始 Bayer 数据出发,经过一系列模块处理,逐步完成图像校正和增强,最终生成用于显示或编码的标准图像。常见处理模块包括&a…...
【设计模式】模板模式
简介 假设你要冲泡咖啡和茶,两者的流程相似但部分步骤不同: 烧水(公共步骤)加入主材料(咖啡粉/茶叶)添加调料(糖/牛奶)→ 可选步骤倒进杯子(公共步骤) 模板…...
GDB调试程序的基本命令和用法(Qt程序为例)
1. 引言 GDB(GNU Debugger)是一个强大的命令行调试工具,它可以帮助开发者在程序运行时查找和修复错误。当调试Qt程序时,GDB同样适用,并且能够帮助开发者定位诸如数组越界挂死等复杂问题。 2. 基本命令 2.1 启动GDB …...