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

使用POI实现Excel文件的读取(超详细)

目录

一 导入poi相关的maven坐标

二 实现创建并且写入文件

2.1实现步骤

 2.2实现代码

2.3效果展示

​编辑 

2.4注意

三 实现从Excel文件中读取数据 

3.1实现步骤

3.2实现代码

 3.3结果展示


一 导入poi相关的maven坐标

        <!-- Apache poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></dependency>

二 实现创建并且写入文件

2.1实现步骤

        往Excel文件中写入数据大致分为五步:

        1.创建excel文件

        2.创建excel文件的sheet页

        3.在sheet页中创建表格的行和列,即单元格

        4.在对应单元格中写入数据

        5.指定创建文件的路径

        6.关闭资源

 2.2实现代码

创建Excel文件并且写入数据的代码:

 /*** 通过POI创建excel文件并且向文件中写入数据*/public static void write() throws Exception {// 1.创建一个新的excel文件XSSFWorkbook excel = new XSSFWorkbook(); // 通过这个方法是在内存中创建的// 2.在excel文件中创建一个sheet标签页XSSFSheet sheet = excel.createSheet("info"); // info是这个sheet的名字,不是excel文件的名字// 3.在sheet标签页中创建行对象XSSFRow row = sheet.createRow(0); // 下标从0开始,0代表第一行// 4.在行上面创建单元格并写入数据row.createCell(0).setCellValue("序号"); // 第一列row.createCell(1).setCellValue("姓名"); // 第二列row.createCell(2).setCellValue("年龄"); // 第三列// 然后在第二行对应的列下面写入相应的值XSSFRow row2 = sheet.createRow(1);row2.createCell(0).setCellValue("1"); // 序号为1row2.createCell(1).setCellValue("张三"); // 姓名为张三row2.createCell(2).setCellValue("99"); // 年龄为18// 在第三行对应的列下面写入对应的值XSSFRow row3 = sheet.createRow(2);row3.createCell(0).setCellValue("2");row3.createCell(1).setCellValue("李四");row3.createCell(2).setCellValue("23");// ... 后面按照需要自己继续创建单元格写内容// 5.最后指定excel文件写入的地址FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\feisi\\cangQiong\\info.xlsx"));excel.write(fileOutputStream);// 6.关闭资源fileOutputStream.close();excel.close();}

2.3效果展示

 

文件内容:

2.4注意

        这里有一个点特别需要注意,就是这段往单元格中写入数据的代码:

        // 然后在第二行对应的列下面写入相应的值XSSFRow row2 = sheet.createRow(1);row2.createCell(0).setCellValue("1"); // 序号为1row2.createCell(1).setCellValue("张三"); // 姓名为张三row2.createCell(2).setCellValue("99"); // 年龄为18

在上面这段代码中 , 我们经常会因为方便,不先给对象引入变量row2 , 而是直接调用创建列的方法,然后写入数据,这样会导致数据写不进去 , 如下:

        // 然后在第二行对应的列下面写入相应的值// XSSFRow row2 = sheet.createRow(1);sheet.createRow(1).createCell(0).setCellValue("1"); // 序号为1sheet.createRow(1).createCell(1).setCellValue("张三"); // 姓名为张三sheet.createRow(1).createCell(2).setCellValue("99"); // 年龄为18

 那么得到的表格就会数据缺失,结果如下:

三 实现从Excel文件中读取数据 

3.1实现步骤

读取excel文件大致分为五步:

1.获取指定的excel文件对象

2.获取指定该文件对象的sheet页

3.遍历该sheet页中的行

4.遍历每一行的所有列并且获取该单元格的数据

5.关闭资源

3.2实现代码

读取excel文件方法实现代码如下:

  public static void read() throws Exception{
//        1.还是一样得到一个excel文件对象,但是我们这里是读 , 所以要指定文件路径FileInputStream fileInputStream = new FileInputStream(new File("D:\\feisi\\cangqiong\\info.xlsx"));XSSFWorkbook excel = new XSSFWorkbook(fileInputStream);
//        2.读取excel文件中的sheet1页(因为这个文件就只创建了一个sheet页)
//        XSSFSheet sheet = excel.getSheetAt(0);//这是直接拿第一个sheet页XSSFSheet sheet = excel.getSheet("info");//这是根据sheet页的名字来拿sheet页
//        3.遍历所有行,但是我不知道有多少行,所以我可以直接获取最后有文字的那一行,这样就知道一个有多少行了int lastRowNum = sheet.getLastRowNum();//获取有文字的最后一行行号for (int i = 0 ; i<=lastRowNum ; ++i){
//            获得某一行XSSFRow row = sheet.getRow(i);
//            4.遍历该行得所有单元格对象,并且获取该单元格对象中得数据for (Cell cell : row){String stringCellValue = cell.getStringCellValue();System.out.print(stringCellValue+"\t");}
//            读完一行的数据后换行System.out.println();}
//        5.关闭资源excel.close();fileInputStream.close();}

 3.3结果展示

调用该方法,得到输出的excel中获取到的数据:

本次分享就在这里 , 谢谢大家,加油! 

相关文章:

使用POI实现Excel文件的读取(超详细)

目录 一 导入poi相关的maven坐标 二 实现创建并且写入文件 2.1实现步骤 2.2实现代码 2.3效果展示 ​编辑 2.4注意 三 实现从Excel文件中读取数据 3.1实现步骤 3.2实现代码 3.3结果展示 一 导入poi相关的maven坐标 <!-- Apache poi --><dependency><gro…...

Debezium系列之:记录一次数据库某张表部分数据未同步到hive表的原因

Debezium系列之:记录一次数据库某张表部分数据未同步到hive表的原因 一、背景二、查找数据丢失流程三、数据丢失原因四、解决方法一、背景 反馈mysql数据库中某张表的数据没有同步到hive中,现在需要排查定位下原因数据丢失一般常见需求排查的方向: 数据是否采集到hdfs上采集…...

爆破器材期刊

《爆破器材》简介   《爆破器材》自1958年创刊以来&#xff0c;深受广大读者喜爱&#xff0c;是中国兵工学会主办的中央级技术刊物&#xff0c;在国内外公开发行&#xff0c;近几年已发行到10个国家和地区。《爆破器材》杂志被美国著名检索机构《化学文摘》&#xff08;CA&a…...

Nginx Websocket 协议配置支持

前后分离的 Web 架构应用&#xff0c;在开发环境启动是可以直接连接支持 websocket 协议&#xff0c;因为没有中间件做转发处理。 当我们对前端进行编译后&#xff0c;通过 nginx 反向代理访问时&#xff0c;需要在nginx 配置文件中增加一些特定的头信息&#xff0c;让服务端识…...

【生成式对抗网络】GANs在数据生成、艺术创作,以及在增强现实和虚拟现实中的应用

一、GANs在数据生成中的应用 生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;在数据生成领域具有显著的应用价值。GANs通过生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;两个相互竞争的神经网络&#x…...

大模型面试(三)

这次是某家公司的一个电话面试&#xff0c;问的过程还比较简单直接。 问&#xff1a;我们在大模型开源项目的应用上遇到了什么困难&#xff1f; 这个。。有两个困难&#xff0c;一个是RAG的优化&#xff0c;一开始RAG是比较慢的&#xff0c;而且召回率不高&#xff1b; 后来…...

pycharm中快捷键汇总

Pycarm指令汇总 Ctrl鼠标 单击&#xff0c;能直接查看其用法 Ctrl/ 快速注释 CtrlC 在pycharm的terminal中可以停止运行, 其他的地方可以复制。 CtrlV 粘贴 CtrlA 全选 CtrlP 查看&#xff08;&#xff09;中需要填写什么参数 Altenter 自动不补全所需要的库...

TCP/IP协议族结构和协议

TCP/IP协议族是互联网及许多其他网络的基础,它由一系列相互关联的协议组成,用于实现网络通信。TCP/IP协议族采用ARPANET参考模型,大致可以分为四个层次:链路层、网络层、传输层和应用层。每个层次都有特定的协议和功能,确保数据能够从一个网络设备传输到另一个网络设备。 …...

大模型一些概念的理解 - 线性层、前向传播、后向传播

文章目录 前言一、线性层1. 什么是线性层&#xff1f;2. 通俗解释3. 示例 二、前向传播1. 什么是前向传播&#xff1f;2. 通俗解释3. 示例 三、后向传播1. 什么是后向传播&#xff1f;2. 通俗解释3. 具体步骤 四、示例五、在 PyTorch 中的后向传播 前言 最近提问里有问到一些名…...

AWS 云安全性:检测 SSH 暴力攻击

由于开源、低成本、可靠性和灵活性等优势&#xff0c;云基础设施主要由基于linux的机器主导&#xff0c;然而&#xff0c;它们也不能幸免于黑客的攻击&#xff0c;从而影响云的安全性。攻击Linux机器最流行的方法之一是通过SSH通道。 什么是 SSH 安全外壳协议&#xff08;Sec…...

7.9数据结构

思维导图 作业 doubleloop.h #ifndef __DOUBLELOOP_H__ #define __DOUBLELOOP_H__#include <stdio.h> #include <stdlib.h>typedef int datatype; typedef struct node {union{int len;datatype data;};struct node *pri;//前驱指针struct node *next;//后继指针…...

Python 文件操作:打开数据处理的大门

在 Python 的学习之旅中&#xff0c;文件操作是一个非常实用且必不可少的技能。不论是数据分析还是日常的数据处理&#xff0c;良好的文件操作技巧都能让你的编程之路更加顺畅。今天&#xff0c;我将带你走进 Python 文件操作的世界&#xff0c;不仅教你如何读写文件&#xff0…...

单对以太网连接器多场景应用

单对以太网连接器应用场景概述 单对以太网&#xff08;Single Pair Ethernet&#xff0c;简称SPE&#xff09;作为一种新兴的以太网技术&#xff0c;以其独特的优势在多个领域得到了广泛的应用。SPE通过单对电缆进行数据传输&#xff0c;支持高速数据传输&#xff0c;同时还能…...

Python pip的更新问题

你是否也出现了更新pip的情况 1、提示更新pip版本 pip install --upgrade pip2、更新操作&#xff0c;我操作了 pip install --upgrade pip更新了&#xff0c;等啊等。。。 然后就是连接超时&#xff0c;安装失败 3、我不信&#xff0c;我就要更新&#xff0c;我还要使用镜…...

[Linux][Shell][Shell基础] -- [Shebang][特殊符号][变量][父子Shell]详细讲解

目录 0.前置知识1.Shebang2.Linux特殊符号整理3.变量4.环境变量5.父子shell0.概念1.创建进程列表(创建子shell执行命令) 6.内置命令 vs 外置命令 0.前置知识 #用于注释shell脚本语⾔属于⼀种弱类型语⾔&#xff1a;⽆需声明变量类型&#xff0c;直接定义使⽤shell三剑客&#…...

DS200CVMAG1AEB处理器 控制器 模块

DS200CVMAG1AEB特征&#xff1a; 高性能&#xff1a;采用先进的控制算法和高功率IGBT器件&#xff0c;可提供高电流和精确的运动控制。 高精度&#xff1a;采用高分辨率编码器和位置环路技术&#xff0c;位置精度可达0.1μm&#xff0c;适用于各种精密机械应用&#xff0c;如数…...

阈值分割后配合Connection算子和箭头工具快速知道区域的ID并选择指定区域

代码 dev_close_window () read_image (Image, E:/机器视觉学习/海康视觉平台/二期VM视觉学习/二期VM视觉学习/机器视觉程序/标定相机找圆心和焊头修正相机找圆心之算法软件/标定相机找圆心和焊头修正相机找圆心之算法软件/03 标定相机找圆心/S2/1号机/1.bmp) get_image_size …...

【work】AI八股-神经网络相关

Deep-Learning-Interview-Book/docs/深度学习.md at master amusi/Deep-Learning-Interview-Book GitHub 网上相关总结&#xff1a; 小菜鸡写一写基础深度学习的问题&#xff08;复制大佬的&#xff0c;自己复习用&#xff09; - 知乎 (zhihu.com) CV面试问题准备持续更新贴 …...

【LeetCode】12. 小张刷题计划

稳住&#xff0c;能赢&#xff01;没有经验的同学在面试岗位的时候&#xff0c;总是显得手忙脚乱&#xff0c;所以多练习&#xff0c;把技能提升&#xff0c;眼界提升&#xff0c;接着心态放平和&#xff0c;不要慌张&#xff0c;把面试题目读懂读透彻就会大大提升赢的概率。 1…...

Tomcat部署以及优化

1、tomcat tomcat是用java代码的程序&#xff0c;运行的是java的web服务器 tomcat和php一样都是用来处理动态页面&#xff0c;tomcat也可以做为web应用服务器&#xff0c;开源的 php处理.php为结尾的 tomcat 处理.jsp nginx 处理 .html 2、tomcat的特点和功能 1、servle…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...