Java使用POI读取Excel名称管理器

news/2024/5/10 12:49:19/文章来源:https://blog.csdn.net/namelessmyth/article/details/132113273

文章目的

本文主要介绍如何使用poi读取到Excel的名称管理器中的内容。并且定位到单元格。

在企业的开发中可能需要通过名称管理器定位到某个单元格,然后在单元格上生成签名。

环境配置

Java:Jdk1.8

poi:5.2.3

maven依赖(pom.xml):

<dependencies><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency><!-- 以下依赖非必须,可根据项目情况选择性依赖 --><!-- poi案例代码,可以去掉 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-examples</artifactId><version>5.2.3</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.15</version></dependency><!-- 使用slf4j 作为日志门面 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.36</version></dependency><!-- 使用 log4j2 的适配器进行绑定 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.9.1</version></dependency><!-- log4j2 日志门面 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.17.2</version></dependency><!-- log4j2 日志实面 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.17.2</version></dependency><!-- log4j2-异步日志依赖 --><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.4.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.9.3</version><scope>test</scope></dependency></dependencies>

实现思路

poi的WorkBook有个getNames方法可以读到名称。

Excel操作

Excel的名称在下图中新建

参考代码

以下代码用于得到单元格引用对象(CellReference)

@Slf4j
public class PoiExcelUtil {/*** 返回Excel名称管理器中所有名称对应的单元格引用** @param path Excel工作簿路径* @return List<CellReference>*/public static List<CellReference> listNameCell(String path) throws IOException {List<CellReference> result = null;if (StrUtil.isNotBlank(path)) {log.info("excelFilePath:{}", path);Workbook book = new XSSFWorkbook(new FileInputStream(path));result = listNameCell(book);book.close();}return result;}/*** 返回Excel名称管理器中所有名称对应的单元格引用** @param book Excel工作簿对象* @return List<CellReference>*/public static List<CellReference> listNameCell(Workbook book) throws IOException {List<CellReference> result = null;// 打开Excel文件if (book != null && book.getAllNames() != null) {result = new ArrayList<>(book.getAllNames().size());// 获取所有的名称管理器for (Name namedRange : book.getAllNames()) {String refersToFormula = namedRange.getRefersToFormula();CellReference cellReference = new CellReference(refersToFormula);result.add(cellReference);}}return result;}/*** 根据名称得到名称管理器中的名称单元格引用** @param filePath* @param nameName* @return CellReference*/public static CellReference getNameCell(String filePath, String nameName) throws IOException {CellReference result = null;log.info("excelFilePath:{},nameName:{}", filePath, nameName);if (StrUtil.isNotBlank(filePath) && StrUtil.isNotBlank(nameName)) {Workbook book = new XSSFWorkbook(new FileInputStream(filePath));result = getNameCell(book, nameName);book.close();}return result;}/*** 根据名称得到名称管理器中的名称单元格引用** @param book* @param nameName* @return CellReference*/public static CellReference getNameCell(Workbook book, String nameName) {CellReference result = null;// 打开Excel文件if (book != null) {Name name = book.getName(nameName);if (name != null) {result = new CellReference(name.getRefersToFormula());}}return result;}
}

在单元测试代码中通过CellReference来获取单元格。

CellReference中记录着sheet名字,行号,列号。

class PoiExcelUtilTest {String excelPath = "E:\\resource\\20230801.xlsx";@Testvoid getNameCell()  throws IOException {Workbook book = new XSSFWorkbook(new FileInputStream(excelPath));CellReference cell = PoiExcelUtil.getNameCell(book, "name1");//先找到SheetSheet sheet = book.getSheet(cell.getSheetName());//再找到单元格Cell c = sheet.getRow(cell.getRow()).getCell(cell.getCol());System.out.println(c.getNumericCellValue());}@Testvoid listNameCell() throws IOException {List<CellReference> cells = PoiExcelUtil.listNameCell(excelPath);System.out.println(StrUtil.toString(cells));}@Testvoid getNameCell2()  throws IOException {CellReference cell = PoiExcelUtil.getNameCell(excelPath, "name1");System.out.println(StrUtil.toString(cell));}}

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++类和对象入门(下)

C类和对象入门 1. Static成员1.1 Static成员的概念2.2 Static成员的特性 2.友元2.1 友元函数2.2 友元函数的特性2.3 友元类 3. 内部类3.1 内部类的概念和特性 4. 匿名对象5. 再次理解类和对象 1. Static成员 1.1 Static成员的概念 声明为static的类成员称为类的静态成员&…

ARCGIS地理配准出现的问题

第一种。已有省级行政区矢量数据&#xff0c;在网上随便找一个相同省级行政区图片&#xff0c;利用地理配准工具给图片添加坐标信息。 依次添加省级行政区选择矢量数据、浙江省图片。 此时&#xff0c;图层默认的坐标系与第一个加载进来的省级行政区选择矢量数据的坐标系一致…

2019年09月《全国青少年软件编程等级考试》Python一级真题解析

一、单选题 第1题 关于Python的编程环境&#xff0c;下列的哪个表述是正确的&#xff1f; A&#xff1a;Python的编程环境是图形化的&#xff1b; B&#xff1a;Python只有一种编程环境ipython&#xff1b; C&#xff1a;Python自带的编程环境是IDLE&#xff1b; D&#…

Docker入门及安装

文章目录 1.Docker概述:1.什么是docker2.为什么使用docker3.docker优点4.docker资源网址 2.Docker安装1.卸载旧版本dorcker(非必要)2.设置Docker仓库安装docker引擎4.启动验证docker卸载docker 3.Docker底层原理1.docker的结构和基本概念2.docker为什么比虚拟机快 1.Docker概述…

MySQL 重置root 密码

5.7 版本 首先要把服务mysql57 关闭 net stop MySQL57 在安装的mysql57的程序的bin中 运行cmd&#xff08;管理员运行&#xff09; mysqld --defaults-file‘mysql存放数据的位置\my.ini’ --skip-grant-tables 上图 错误 注意&#xff1a;如果遇到mysqld: Can’t change dir…

SpringBoot实现数据库读写分离

SpringBoot实现数据库读写分离 参考博客https://blog.csdn.net/qq_31708899/article/details/121577253 实现原理&#xff1a;翻看AbstractRoutingDataSource源码我们可以看到其中的targetDataSource可以维护一组目标数据源(采用map数据结构)&#xff0c;并且做了路由key与目标…

T31开发笔记:librtmp拉流测试

若该文为原创文章&#xff0c;转载请注明原文出处。 T31使用librtmp拉流并保存成FLV文件或H264和AAC文件。 librtmp编译在前面有教程&#xff0c;自行编译。 实现的目的是想要获取获取rtmp的AAC流并播放&#xff0c;实时双向对讲功能。 一、硬件和开发环境 1、硬件&#xff1…

Emacs之解决键值绑定冲突问题(一百二十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【数字IC基础】低功耗设计

低功耗技术 功耗构成静态功耗(漏电功耗)动态功耗翻转功耗(Switch Power)短路功耗(Internal Power) 不同类型的标准单元的功耗 低功耗设计方法降低芯片工作电压多阈值工艺方法电源门控&#xff08;Power Gating&#xff09;多电压域(Multi-Voltage Domain)体偏置门控时钟一个简单…

WSL1升级为WSL2

首先需要启用组件 使用管理员打开Powershell并运行 Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform启用后会要求重启计算机 从https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi获取WSL2 Linux内核更新包&#xff0c;…

浅谈postman设置token依赖步骤

&#x1f4cc; 博客主页&#xff1a; 程序员念姐 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 如果你也想学习软件测试&#xff0c;文末卡片有我的交流群632880530&#xff0c;加入我们&…

【蓝图】p48冲刺、瞬移、多段跳

p48冲刺&#xff0c;瞬移&#xff0c;多段跳 p48冲刺&#xff0c;瞬移&#xff0c;多段跳冲刺功能实现瞬移功能实现Set Actor Location&#xff08;设置Actor位置&#xff09; 二段跳 p48冲刺&#xff0c;瞬移&#xff0c;多段跳 按shift加速&#xff0c;松开shift恢复普通速度…

数据库:MYSQL参数max_allowed_packet 介绍

1、参数作用 max_allowed_packet参数是指mysql服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小。如果超过了设置的最大长度,则会数据库保持数据失败。 2、问题场景 ● 有时候业务的需要,可能会存在某些字段数据长度非常大(比如富文本编辑器里面的内容),…

【项目 线程2】3.5 线程的分离 3.6线程取消 3.7线程属性

3.5 线程的分离 #include <stdio.h> #include <pthread.h> #include <string.h> #include <unistd.h>void * callback(void * arg) {printf("chid thread id : %ld\n", pthread_self());return NULL; }int main() {// 创建一个子线程pthread…

设备管理系统与物联网的融合:实现智能化设备监控和维护

在数字化时代&#xff0c;设备管理系统和物联网技术的融合为工业企业带来了巨大的变革和创新。本文将探讨设备管理系统与物联网的融合&#xff0c;重点介绍设备健康管理平台在实现智能化设备监控和维护方面的关键作用和优势。 一、设备管理系统与物联网的融合 随着物联网技术的…

springboot+vue网红酒店客房预定系统的设计与实现_ui9bt

随着计算机技术发展&#xff0c;计算机系统的应用已延伸到社会的各个领域&#xff0c;大量基于网络的广泛应用给生活带来了十分的便利。所以把网红酒店预定管理与现在网络相结合&#xff0c;利用计算机搭建网红酒店预定系统&#xff0c;实现网红酒店预定的信息化。则对于进一步…

硬件串口通信协议学习(UART、IIC、SPI、CAN)

0.前言 学习资料&#xff1a;江协科技的个人空间-江协科技个人主页-哔哩哔哩视频 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发 全双工&#xff1a;通信…

MybatisPlus实战笔记

概述 Mybatis支持定制化SQL、存储过程以及高级映射&#xff0c;避免几乎所有的 JDBC 代码和手动设置参数以及获取结果集。可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将接口和Java的POJO映射成数据库中的记录。 缺点&#xff1a; SQL工作量很大&#xff0c;尤…

5款无广告的超实用软件,建议收藏!

​ 大家好,我又来了,今天向大家推荐几款软件,它们有个共同的特点,就是无广告、超级实用,大家看完之后,可以自己去搜索下载试用。 1.重复文件清理——Duplicate Cleaner ​ Duplicate Cleaner是一款用于找出硬盘中重复文件并删除的工具。它可以通过内容或文件名查找重复文档、…

Delphi Professional Crack,IDE插件开发和扩展IDE

Delphi Professional Crack,IDE插件开发和扩展IDE 构建具有强大视觉设计功能的单源多平台本机应用程序。 Delphi帮助您使用Object Pascal为Windows、Mac、Mobile、IoT和Linux构建和更新数据丰富、超连接、可视化的应用程序。Delphi Professional适合个人开发人员和小型团队构建…