java读取excel中的数据(包括.xlsx和.xls)

2023-10-28

java读取excel中的数据(包括.xlsx和.xls)

  java读取excel文件中的数据常用jxl和poi两种方式,其中最主要的区别在于jxl不支持.xlsx,而poi支持。小编平时用的比较多的是poi的方式,所以今天小编介绍的也是poi这种方式,另外一种方式小编就不再介绍了。其中poi提供了HSSFWorkbook和XSSFWorkbook两个实现类,区别在于HSSFWorkbook主要读取的是.xls格式的文件,XSSFWorkbook主要读取的是.xlsx格式的文件。

在使用poi的时候首先明确一下基本概念(这里以XSSFWorkbook为例):
  先创建一个工作簿,一个工作簿可以有多个工作表,一个工作表可以有多个行,一个行可以有多个单元格

  工作簿 ----------->XSSFWorkbook

  工作表 ----------->XSSFSheet

  行     ----------->XSSFRow

  单元格 ----------->XSSFCell

下图是我创建的excel表中的数据内容

在这里插入图片描述在这里插入图片描述

接下来就是代码部分的内容了:

  • 一、.xlsx格式文件的数据的读取
  1. 引入包依赖关系

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.kejizhentan</groupId>
      <artifactId>poiReadExcel</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <dependencies>
      	<dependency>
      		<groupId>org.apache.poi</groupId>
      		<artifactId>poi</artifactId>
      		<version>4.1.0</version>
      	</dependency>
      	<dependency>
      		<groupId>org.apache.poi</groupId>
      		<artifactId>poi-ooxml</artifactId>
      		<version>4.1.0</version>
      	</dependency>
      </dependencies>
    </project>
    
  2. java代码

    package com.kejizhentan.util;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class ReadExcel {
    
    	public static void main(String[] args) {
    		try {
                //创建工作簿对象
                XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream("E://java17//java_practise//poiReadExcel//src//main//resources//chart.xlsx"));
                //获取工作簿下sheet的个数
                int sheetNum = xssfWorkbook.getNumberOfSheets();
                System.out.println("该excel文件中总共有:"+sheetNum+"个sheet");
                //遍历工作簿中的所有数据
                for(int i = 0;i<sheetNum;i++) {
                	//读取第i个工作表
                	System.out.println("读取第"+(i+1)+"个sheet");
                    XSSFSheet sheet = xssfWorkbook.getSheetAt(i);
                    //获取最后一行的num,即总行数。此处从0开始
                    int maxRow = sheet.getLastRowNum();
                    for (int row = 0; row <= maxRow; row++) {
                        //获取最后单元格num,即总单元格数 ***注意:此处从1开始计数***
                        int maxRol = sheet.getRow(row).getLastCellNum();
                        System.out.println("--------第" + row + "行的数据如下--------");
                        for (int rol = 0; rol < maxRol; rol++){
                            System.out.print(sheet.getRow(row).getCell(rol) + "  ");
                        }
                        System.out.println();
                    }
                }
                
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    	}
    
    }
    
    
  • 二、.xls格式文件的数据的读取
  1. 引入包依赖关系(同XSSFWorkbook)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.kejizhentan</groupId>
      <artifactId>poiReadExcel</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <dependencies>
      	<dependency>
      		<groupId>org.apache.poi</groupId>
      		<artifactId>poi</artifactId>
      		<version>4.1.0</version>
      	</dependency>
      	<dependency>
      		<groupId>org.apache.poi</groupId>
      		<artifactId>poi-ooxml</artifactId>
      		<version>4.1.0</version>
      	</dependency>
      </dependencies>
    </project>
    
  2. java代码

    package com.kejizhentan.util;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    public class ReadExcel {
    
    	public static void main(String[] args) {
    		try {
                //创建工作簿
    			HSSFWorkbook hssfWorkbook = new HSSFWorkbook(new FileInputStream("E://java17//java_practise//poiReadExcel//src//main//resources//chart.xls"));
                //获取工作簿下sheet的个数
                int sheetNum = hssfWorkbook.getNumberOfSheets();
                System.out.println("该excel文件中总共有:"+sheetNum+"个sheet");
                //遍历工作簿中的所有数据
                for(int i = 0;i<sheetNum;i++) {
                	//读取第i个工作表
                	System.out.println("读取第"+(i+1)+"个sheet");
                	HSSFSheet sheet = hssfWorkbook.getSheetAt(i);
                    //获取最后一行的num,即总行数。此处从0开始
                    int maxRow = sheet.getLastRowNum();
                    for (int row = 0; row <= maxRow; row++) {
                        //获取最后单元格num,即总单元格数 ***注意:此处从1开始计数***
                        int maxRol = sheet.getRow(row).getLastCellNum();
                        System.out.println("--------第" + row + "行的数据如下--------");
                        for (int rol = 0; rol < maxRol; rol++){
                            System.out.print(sheet.getRow(row).getCell(rol) + "  ");
                        }
                        System.out.println();
                    }
                }
                
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    	}
    
    }
    
    

注意:

```bash
Exception in thread "main" org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
	at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:130)
	at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:117)
	at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:294)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:400)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:381)
	at com.kejizhentan.util.ReadExcel.main(ReadExcel.java:14)
```

如果文件格式使用工具对应有问题就会报以下错误,所以使用的时候要分清楚是.xlsx还是.xls文件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java读取excel中的数据(包括.xlsx和.xls) 的相关文章

随机推荐

  • 布林通道参数用20还是26_布林线指标参数设置为13、20、26、30、60、99,那个才是最佳?...

    布林线 Boll 指标是通过计算股价的 标准差 再求股价的 信赖区间 很多炒股新人不知道怎么设置布林线的参数 13 20 26 30 60 99那个才是最佳 下面详细介绍 一起来学习吧 布林带指标参数设置多少才最佳 布林带的参数一般默认的情
  • 系统用户名为中文导致PowerShell无法正确操作conda

    本文叙述的问题诱因 系统用户名为中文 本文最后给出了解决方案 并给出了原理猜测 conda版本 4 10 3 系统版本 Win11 专业版 21H2 现象 我在Win11使用Powershell时 发现终端提示 conda没有被初始化 需要
  • Spring系列篇--关于Spring Bean完整的生命周期【附有流程图,超级易懂】

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于Spring的相关操作吧 目录 Welcome Huihui s Code World 一 Spring Bean是单例模式还是多例模式 二 论证Bean是单
  • AMD历代CPU发布时间

    1969年5月1日 AMD公司以10万美元的启动资金正式成立 1997 AMD推出AMD K6处理器 1998 AMD在微处理器论坛上发布AMD速龙处理器 以前的代号为K7 1999 AMD推出AMD速龙处理器 它是业界第一款支持Micro
  • ioctl函数详细分析

    IPv4 和 IPv6 的网络接口操作使用套接字 ioctl 命令 级别 中级 Katiyar Manish manish katiyar in ibm com 软件工程师 IBM Intel Microsoft HPShweta Gupt
  • 显式调用构造函数和析构函数

    今天跟同事聊天 他说到STL源码有用到显示调用析构函数 试一了一下 果然能行 include lt iostream gt using namespace std class MyClass public MyClass cout lt l
  • SqlServer傻瓜教程 — 表备份

    大家好 我们知道类似于ERP这种大型软件 最大的难点就在庞大数据库的整理和维护 表备份顾名思义 是对一个表进行备份 那么我们什么时候需要表备份呢 表备份是在操作大型ERP数据库的某一个表中有重要数据的时候 测试你对此表操作的存储过程 或者测
  • pytorch下import numpy失败_PyTorch的编译系统

    背景 本文以PyTorch 1 0为基础 PyTorch的编译首先是python风格的编译 使用了python的setuptools编译系统 以最基本的编译安装命令python setup py install 为例 这一编译过程包含了如下
  • 两台linux服务器互相自动备份

    将数据同步到其它服务器这里使用Linux同步文件工具rsync来进行文件的同步 rsync rsync是类unix系统下的数据镜像备份工具 remote sync 一款快速增量备份工具 Remote Sync 远程同步 支持本地复制 或者与
  • 【教3妹学算法-leetcode】数组能形成多少数对

    插 前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到网站 坚持不懈 越努力越幸运 大家一起学习鸭 3妹 这么热的天气还要持续多久啊 快要被热死了 2哥 感觉还要有一阵子 今天刚入伏 3妹 啊 今年
  • 三极管的工作原理详解,图文+案例

    什么是三极管 三极管全称是 晶体三极管 也被称作 晶体管 是一种具有放大功能的半导体器件 通常指本征半导体三极管 即BJT管 典型的三极管由三层半导体材料 有助于连接到外部电路并承载电流的端子组成 施加到晶体管的任何一对端子的电压或电流控制
  • C语言程序设计 例7-5

    例7 5 原题 选择排序法 输入一个正整数n 1
  • C++解释器模式:Interpreter Pattern

    当有语言要解释时 请使用解释器模式为语言创建解释器 解释器模式的核心是解释器类 在解释器模式中一般会定义两种解释器 终结符解释器 Terminal Expression Interpreter 终结符解释器用于解释语言中的基本单位 对应语法
  • [架构之路-210]- 人人都是产品经理 - 互联网产品解决用户需求的分析思路和方法笔记

    目录 前言 一 产品需求分析思路和方法 产品需求 1 产品需求的内涵 什么是产品 什么是需求 需求的产品的关系 案例分析 理解需求的误区 2 需求的分类及层次 规律 拆解用户需求 需求分类 需求层次 马斯洛需求层次理论 需求层次的规律 拆解
  • K-means聚类之一(多维整型数据)

    算法介绍 k means 算法接受输入量 k 然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足 同一聚类中的对象相似度较高 而不同聚类中的对象相似度较小 聚类相似度是利用各聚类中对象的均值所获得一个 中心对象 引力中心 来进行计算
  • javascript对象概念大全

    http www css88 com archives 512 本文介绍了几乎所有关于对象的基本概念 什么是对象 如何创建对象 对象的属性的设置和读取 删除属性的方法 构造函数 对象原型 父类 子类 继承等等 1 对象 对象是一种复合数据类
  • Python爬虫小程序

    import base64 import string import time from selenium import webdriver from selenium webdriver chrome service import Ser
  • 【Docker技术入门与实践(第2版)】Docker入门_学习笔记

    第一章 1 Docker入门须知 1 1 Docker基本知识 Docker是基于Go语言实现的开源容器项目 诞生于2013年年初 最初发 起者是dotCloud公司 Docker自开源后受到广泛的关注和讨论 目前已有多个相关项目 包括Do
  • OpenCV中GPU模块(CUDA)函数

    The OpenCV GPU module is a set of classes and functions to utilize GPU computational capabilities It is implemented usin
  • java读取excel中的数据(包括.xlsx和.xls)

    java读取excel中的数据 包括 xlsx和 xls java读取excel文件中的数据常用jxl和poi两种方式 其中最主要的区别在于jxl不支持 xlsx 而poi支持 小编平时用的比较多的是poi的方式 所以今天小编介绍的也是po