SpringBoot整合POI实现Excel文件的导出与导入

news2025/4/19 0:24:41

使用 Apache POI 操作 Excel文件,系列文章:

《SpringBoot整合POI实现Excel文件的导出与导入》 

《SpringMVC实现文件的上传与下载》

《C#使用NPOI导出Excel文件》

《NPOI使用手册》

1、Apache POI 的介绍

Apache POI 是一个基于 Java 的开源库,专为读写 Microsoft Office 格式文件(如 Excel、Word、PowerPoint、Visio 等)而设计,支持 Office 97-2016 版本的文件操作‌。其名称源于“Poor Obfuscation Implementation”(简洁版的模糊实现)的首字母缩写‌。Apache POI 功能全面,覆盖 Office 文件的全生命周期操作。‌社区活跃,文档丰富,适用于复杂场景(如:模板替换、动态生成报表)‌。

‌多格式支持‌:

  • Excel‌:通过 HSSF(.xls 格式)和 XSSF(.xlsx 格式)模块实现读写‌。
  • Word‌:通过 HWPF(.doc 格式)和 XWPF(.docx 格式)模块处理文档‌。
  • PowerPoint‌:支持 .ppt 和 .pptx 文件的创建与修改‌。

应用场景‌:

  • ‌企业级开发‌:生成复杂 Excel 报表、自动化数据导入导出‌。
  • ‌模板化文档处理‌:通过占位符替换动态填充 Word 模板内容‌。
  • 跨平台兼容需求‌:在非 Windows 系统中实现 Office 文件的读写与转换‌。 

Apache POI 中文教程:《Apache POI中文教程》

2、Apache POI 的接口

POI 将一个 Excel 文件划分为如下图所示的几个部分,每一个部分都对应一个 POI 接口。其中, Workbook 表示整个 Excel 文件,Sheet 表示 Excel 文件中的分页,Row 表示 Excel 文件中某一页的一行,Cell 表示 Excel 文件中某一页的一个具体的单元格。当读取 Excel 文件中每一个单元格的数据需要按照“Workbook > Sheet > Row > Cell”顺序创建对应 POI 接口的对象。

2.1 创建 Workbook 对象

创建 Workbook 对象有如下两种方式,这两种方式都需要使用 WorkbookFactory 工厂类的 create() 方法。

(1)根据 File 对象创建 Workbook 对象。

File file = new File("D:\\demo.xlsx");
Workbook workbook = WorkbookFactory.create(file);

(2)从字节输入流中创建 Workbook 对象。

InputStream is = new FileInputStream("D:\\demo.xlsx");
Workbook workbook = WorkbookFactory.create(is);

2.2 创建 Sheet 对象

在获取 Workbook 对象后,就可以创建 Sheet 对象。

Sheet sheet = workbook.getSheetAt(0);

getSheetAt() 方法 中的参数为分页的索引。其中,第一个分页的索引为 0。

2.3 创建 Row 对象

在获取 Sheet 对象后,就可以创建 Row 对象。

Row row = sheet.getRow(0);

getCell() 方法中的参数为列索引。其中,第一列的索引为 0。

2.4 创建 Cell 对象

在获取 Row 对象后,就可以创建 Cell 对象。

Cell cell = row.getCell(0);

getRow() 方法中的参数为行索引。其中,第一行的索引为 0。

2.5 获取单元格数据

在获取 Cell 对象后,也就获取了单元格中的具体数据。Excel 文件的单元格可以支持不同的数据类型,这些数据类型在 POI 中采用如下的 CellType 枚举:

CellType.NUMERIC:数字
CellType.STRING:字符串
CellType.FORMULA:公式
CellType.BLANK:空内容
CellType.BOOLEAN:布尔值
CellType.ERROR:错误单元格

程序开发人员可以调用 Cell 对象的 getCellType() 方法判断单元格的数据类型:

if (cell.getCellType() == CellType.NUMERIC) {
    // 数字格式,需要转换
}

返回单元格不同类型的方法:

boolean bool = cell.getBooleanCellValue(); //返回布尔值
java.util.Date date = cell.getDateCellValue(); //返回日期对象
double number = cell.getNumericCellValue(); //返回数字
String str = cell.getStringCellValue();//返回文本数据
String formula = cell.getCellFormula(); //返回公式字符串
RichTextString richText = cell.getRichStringCellValue(); //返回富文本

可以将其封装成一个公共方法:

/**
 * 解析Excel数据类型,返回单元格的值
 */
private Object getCellValue(Cell cell)
{
    //1.获取到单元格的属性类型
    CellType cellType = cell.getCellType();
    //2.根据单元格数据类型获取数据
    Object value = null;
    switch (cellType)
    {
        case STRING:
            value = cell.getStringCellValue();
    

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

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

相关文章

矩阵基础+矩阵转置+矩阵乘法+行列式与逆矩阵

GPU渲染过程 矩阵 什么是矩阵(Matrix) 向量 (3,9,88) 点乘:计算向量夹角 叉乘:计算两个向量构成平面的法向量。 矩阵 矩阵有3行,2列,所以表示为M32 获取固…

(EtherCAT 转 EtherNet/IP)EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

型号 协议转换通信网关 EtherCAT 转 EtherNet/IP MS-GW12 概述 MS-GW12 是 EtherCAT 和 EtherNet/IP 协议转换网关,为用户提供两种不同通讯协议的 PLC 进行数据交互的解决方案,可以轻松容易将 EtherNet/IP 网络接入 EtherCAT 网络中,方便…

分享:批量提取图片文字并自动命名文件,ocr识别图片指定区域并重命名文件名工具,基于WPF和腾讯OCR识别的接口的视线方案

一、项目背景 在处理大量图片时,常常需要从图片中提取特定区域的文字信息,并依据这些信息对图片进行重命名。例如,在档案管理领域,大量纸质文件被扫描成图片后,需要从图片中提取关键信息(如文件编号、日期等)来重命名图片,以便后续的检索和管理;在电商领域,商家可能…

Mysql读写分离(1)-服务器的设置(主从复制)

1.简介 随着网站访问和请求量的增加,单台数据库服务器的连接已耗尽,会出现连接请求还在等待,或是数据库服务器崩溃等现象,这时候我们考虑如何减少数据库的连接,可以通过优化代码、使用缓存、数据库读写分离等方式解决…

STM32F103ZET6移植FATFS文件系统教程(W25Q32)

一、FATFS核心特性 跨平台支持‌ 支持FAT12/FAT16/FAT32格式,兼容Windows文件系统‌; 采用标准C语言编写,代码量小且支持RTOS‌。 配置灵活性‌ 通过宏定义实现功能裁剪,例如: FF_FS_READONLY:设为1时禁…

STM32 模块化开发实战指南:系列介绍

本文是《STM32 模块化开发实战指南》系列的导读篇,旨在介绍整个系列的写作目的、适用读者、技术路径和每一篇的主题规划。适合从事 STM32、裸机或 RTOS 嵌入式开发的个人开发者、初创工程师或企业项目团队。 为什么要写这个系列? 在嵌入式开发中,很多人刚开始都是从点亮一个…

信刻电子档案蓝光光盘刻录安全检测长期归档

信刻一直致力于为档案馆、各行业档案部门,提供跨网数据交换、电子档案数据磁光异质备份归档解决方案。所研制的电子档案光盘智能长期归档系统,满足国产环境下”刻、管、存、检、用”全生命周期管理应用需求,能够提供一份离线归档、一份近线存…

vue3中,element-plus中el-input的v-model和value的用法示例

el-input的v-model&#xff0c;邦定响应式变量 <el-col :span"6"><el-form-item label"检验类别" prop"verifyType"><el-input v-model"applyAllInfo.applyBasicInfo.verifyTypeName" readonly /></el-form-item…

L2-052 吉利矩阵分

L2-052 吉利矩阵 - 团体程序设计天梯赛-练习集 所有元素为非负整数&#xff0c;且各行各列的元素和都等于 7 的 33 方阵称为“吉利矩阵”&#xff0c;因为这样的矩阵一共有 666 种。 本题就请你统计一下&#xff0c;把 7 换成任何一个 [2,9] 区间内的正整数 L&#xff0c;把矩…

Linux:Makefile

编译器gcc 使用方式&#xff1a;gcc [ 选项 ] 要编译的⽂件 [ 选项 ] [ ⽬标⽂件 ] 编译分为以下几个步骤&#xff1a; 1.预处理(进⾏宏替换) 预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等。 预处理指令是以#号开头的代码⾏。 实例: gcc –E hello.c –o hello…

基于双闭环PID控制器的永磁同步电机控制系统匝间故障Simulink仿真

欢迎微♥关注“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2013Rb&#xff09;软件。建议采用matlab2013 Rb及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff0c;高于该版本的matlab均可正…

硬件电路设计之51单片机(2)

声明&#xff1a;绘制原理图和PCB的软件为嘉立创EDA。根据B站尚硅谷嵌入式之原理图&PCB设计教程学习所作个人用笔记。 目录 一、原理图详解 1、TypeC接口 &#xff08;1&#xff09;TypeC接口介绍 &#xff08;2&#xff09;TypeC原理图 2、5V转3.3V 3、单片机电源开…

SpringAI+DeepSeek大模型应用开发——1 AI概述

AI领域常用词汇 LLM&#xff08;LargeLanguage Model&#xff0c;大语言模型&#xff09; 能理解和生成自然语言的巨型AI模型&#xff0c;通过海量文本训练。例子&#xff1a;GPT-4、Claude、DeepSeek、文心一言、通义干问。 G&#xff08;Generative&#xff09;生成式: 根据上…

经济指标学习(一)

系列文章目录 文章目录 系列文章目录1、市净率**一、定义与计算****二、核心意义****三、应用场景****四、局限性****五、分类与衍生指标****总结** 2、市销率**一、定义与计算****二、核心意义****三、优缺点分析****四、适用场景****五、与其他指标的对比****六、实际应用案例…

理解 results = model(source, stream=True) 的工作原理和优势

1. 核心概念解析 (1) streamTrue 的作用 生成器模式&#xff1a;当处理视频或图像序列时&#xff0c;streamTrue 会将结果包装成一个 生成器&#xff08;Generator&#xff09;&#xff0c;逐帧生成 Results 对象&#xff0c;而不是一次性返回所有结果。内存优化&#xff1a;…

国内互联网大厂推出的分布式数据库 的详细对比,涵盖架构、性能、适用场景、核心技术等维度

以下是 国内互联网大厂推出的分布式数据库 的详细对比&#xff0c;涵盖架构、性能、适用场景、核心技术等维度&#xff1a; 一、主流分布式数据库列表 大厂数据库名称类型适用场景发布时间腾讯云TDSQL分布式HTAP金融、电商、游戏、政企2010年阿里云OceanBase分布式HTAP银行核…

Android 项目配置文件解释

Android 项目配置文件解释 目录 Android 项目配置文件解释1. `plugins` 块2. `android` 块3. `dependencies` 块为什么需要 JDK 和 Kotlin1. plugins 块 plugins {id com.android.applicationid org.jetbrains.kotlin.android }id com.android.application:应用 Android 应用…

亚马逊热销变维权?5步搭建跨境产品的安全防火墙

“产品热卖&#xff0c;引来维权”——这已经悄然成为越来越多跨境卖家的“热销烦恼”。曾经拼品拼量&#xff0c;如今却要步步谨慎。商标侵权、专利投诉、图片盗用……这些问题一旦发生&#xff0c;轻则下架、账号被限&#xff0c;重则冻结资金甚至封店。 别让“热销”变“受…

C语言——分支语句

在现实生活中&#xff0c;我们经常会遇到作出选择和判断的时候&#xff0c;在C语言中也同样要面临作出选择和判断的时候&#xff0c;所以今天&#xff0c;就让我们一起来了解一下&#xff0c;C语言是如何作出选择判断的。 目录 1.何为语句&#xff1f; 2.if语句 2.1 if语句的…

绿盟二面面试题

5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39a6eab17cc0ed0fca5f0e4c979ce64bd112762def9ee7cf0112a7e76af&scene21#wechat_redirect 1. 原理深度&…