使用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中获取到的数据:

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

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

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

相关文章

【机器学习】机器学习与自然语言处理的融合应用与性能优化新探索

引言 自然语言处理&#xff08;NLP&#xff09;是计算机科学中的一个重要领域&#xff0c;旨在通过计算机对人类语言进行理解、生成和分析。随着深度学习和大数据技术的发展&#xff0c;机器学习在自然语言处理中的应用越来越广泛&#xff0c;从文本分类、情感分析到机器翻译和…

MySQL集群如何在主节点查询从节点的IP信息

在MySQL集群环境中&#xff0c;要查询从节点&#xff08;也称为复制从库&#xff09;的IP信息&#xff0c;你可以通过在主节点上执行相关的SQL查询来获取。这里提供了一些可能的方法&#xff1a; 方法一&#xff1a;SHOW SLAVE HOSTS命令&#xff08;适用于MySQL复制环境&…

1990-2021年297个地级市RD内部经费支出数据

地级市内部经费支出数据为研究者提供了了解地方政府在科研活动上的投入情况的重要视角。以下是对297个地级市R&D内部经费支出数据的介绍&#xff1a; 数据简介 定义&#xff1a;地级市内部经费支出是指地级市政府在一定时期内用于科研活动的经费支出。用途&#xff1a;这…

C语言 | Leetcode C语言题解之第217题存在重复元素

题目&#xff1a; 题解&#xff1a; struct hashTable {int key;UT_hash_handle hh; };bool containsDuplicate(int* nums, int numsSize) {struct hashTable* set NULL;for (int i 0; i < numsSize; i) {struct hashTable* tmp;HASH_FIND_INT(set, nums i, tmp);if (tm…

SQL 汇总各个部门当前员工的title类型的分配数目

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 有一个部门表…

Sharding-JDBC

一、概念&#xff1a; Sharding-JDBC是一个在客户端的分库分表工具。它是一个轻量级Java框架&#xff0c;在Java的JDBC层提供的额外服务。 ShardingSphere提供标准化的数据分片、分布式事务和数据治理功能。 二、架构图&#xff1a; ShardingRuleConfiguration 可以包含多个 T…

2813. 子序列最大优雅度

2813. 子序列最大优雅度 题目链接&#xff1a;2813. 子序列最大优雅度 代码如下&#xff1a; //参考:https://leetcode.cn/problems/maximum-elegance-of-a-k-length-subsequence/solutions/2375128/fan-hui-tan-xin-pythonjavacgo-by-endless-v2w1 class Solution { public…

Redis基础教程(七):redis列表(List)

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

淘宝卖家遇到无赖怎么投诉举报有效,如何投诉举报淘宝商家

大家好&#xff0c;感谢邀请&#xff0c;今天来为大家分享一下淘宝卖家遇到无赖怎么投诉举报有效的问题&#xff0c;以及和如何投诉举报淘宝商家的一些困惑&#xff0c;大家要是还不太明白的话&#xff0c;也没有关系&#xff0c;因为接下来将为大家分享&#xff0c;希望可以帮…

达梦BUFFER参数过大导致启动失败

达梦BUFFER参数过大导致启动失败 修改BUFFER参数关闭INI参数同步达梦数据库宕机,手动拉起失败。日志报错如下: [dameng@dmhost ~]$ tail -n50 ${DM_HOME}/log/dm_DMDB_1_202406.log 2024-06-28 16:33:12.791 [INFO] database P0004152321 T0000000000004152321 INI parame…

Python酷库之旅-第三方库Pandas(005)

目录 一、用法精讲 7、pandas.read_clipboard函数 7-1、语法 7-2、参数 7-3、功能 7-4、返回值 7-5、说明 7-6、用法 7-6-1、代码示例 7-6-2、结果输出 8、pandas.DataFrame.to_clipboard函数 8-1、语法 8-2、参数 8-3、功能 8-4、返回值 8-5、说明 8-6、用法…

TF-IDF计算过程一步步推导详解含代码演示

相关概念 TF-IDF TF-IDF&#xff08;Term Frequency–Inverse Document Frequency&#xff09;是一种用于资讯检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法&#xff0c;用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在…

数据分析:基于STAR+FeatureCounts的RNA-seq分析全流程流程

流程主要包含两部分组成&#xff1a; 第一部分&#xff1a;二代测序数据的Raw data的fastq文件转换成Gene Count或者Features Counts表&#xff08;行是Features&#xff0c;列是样本名&#xff09;&#xff1b;第二部分&#xff1a;对counts 表进行统计分析&#xff0c;并对其…

C++:对象指针访问成员函数

使用箭头操作符 (->)&#xff1a;ptr->function() 是最常用和推荐的方式&#xff0c;因为它更简洁、更直观。箭头操作符 (->) 被设计为与点操作符 (.) 配合指针一起使用&#xff0c;以便通过指针访问对象的成员。 先解引用指针&#xff0c;然后使用点操作符 (.)&…

云计算渲染时代:选择Blender或KeyShot进行高效渲染

在云渲染技术日益成熟的背景下&#xff0c;挑选一款贴合项目需求的3D渲染软件显得尤为关键。当前&#xff0c;Blender与KeyShot作为业界领先的全能渲染解决方案&#xff0c;广受推崇。它们虽皆能创造出令人信服的逼真视觉效果&#xff0c;但在特色功能上各有所长。本篇文章旨在…

装机选单条内存还是两条内存组建双通道?有什么区别差异?

单通道和双通道内存&#xff0c;单通道仅为一根内存&#xff0c;例如主板上仅插一条8G或16G&#xff0c;甚至是32G内存。 而双通道内存一般需要主板上插上两根或以上数量的内存&#xff0c;例如双8G、双16G、双32G内存。 装机建议上两条内存组建双通道&#xff0c;可以提供双倍…

Java [ 基础 ] Java面向对象编程 (OOP) ✨

目录 ✨探索Java基础 Java面向对象编程 (OOP) ✨ 引言 1. 类和对象 2. 封装 3. 继承 4. 多态 5. 抽象 结论 ✨探索Java基础 Java面向对象编程 (OOP) ✨ 引言 Java是一门以面向对象编程&#xff08;OOP&#xff09;为基础的编程语言。OOP的核心概念包括类和对象、封装…

LT8711UXE2 国产芯片 Type-C with 2lane@8.1Gbps/lane 4K60 USB3.0 在线提供软硬件技术支持服务

2.一般说明 LT8711UXE2是一款高性能的Type-C/DP1.4到HDMI2.0转换器&#xff0c;设计用于将USBType-C源或DP1.4源连接到HDMI2.0收发器。该LT8711UXE2集成了一个符合DP1.4标准的接收器和一个符合HDMI2.0标准的发射器。此外&#xff0c;还包括用于CC通信的两个CC控制器&#xff0c…

React Native与React Native Web:跨平台开发的新选择

React Native和React Native Web是两种基于React框架的跨平台开发技术&#xff0c;它们分别针对原生移动应用和Web应用的开发&#xff0c;但都提供了统一的开发体验和代码复用能力。 React Native 概述 React Native允许开发者使用React的组件化思想和JavaScript编写原生级别…

乐鑫ESPRESSIF芯片开发简介

乐鑫科技&#xff08;Espressif Systems&#xff0c;通常简称乐鑫或ESPRESSIF&#xff09;是一家全球化的无晶圆厂半导体公司&#xff0c;专注于研发无线通信微控制器单元&#xff08;MCU&#xff09;芯片&#xff0c;特别在物联网&#xff08;IoT&#xff09;领域有着显著的影…