JAVA如何读取Excel数据

 更新时间:2020年09月04日 09:41:26   作者:孟应杰  
这篇文章主要介绍了JAVA如何读取Excel数据,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下

1.创建Maven项目在pom文件中添加依赖

<dependencies>
    <!-- 旧的 .xls -->
    <!--<dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.17</version>
    </dependency>-->
    <!-- 新的 .xlsx -->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.17</version>
    </dependency>
  </dependencies>

2.编写代码

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;

public class PoiTest {
  public static void main(String[] args) throws IOException {
    FileInputStream is = new FileInputStream("src/main/resources/test.xlsx");
    XSSFWorkbook workbook = new XSSFWorkbook(is);
    //读取Sheet
    Sheet sheet = workbook.getSheetAt(0);
    Row row = sheet.getRow(0);
    //获取最大行数
    int rownum = sheet.getPhysicalNumberOfRows();
    //获取最大列数
    int colnum = row.getPhysicalNumberOfCells();
    for (int i = 0; i < rownum; i++) {
      //获取第i行数据
      row = sheet.getRow(i);
      for (int j = 0; j < colnum; j++) {
        Cell cell = row.getCell(j);
        cell.setCellType(CellType.STRING);
        String cellText = cell.getStringCellValue();
        System.out.print(cellText + "\t");
      }
      System.out.println();
    }
  }
}

3.报错

3.1 异常解决Cannot get a STRING value from a NUMERIC cell poi

poi导入excel表格数据时报java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell异常是因为在读取cell单元格字符串时,有number类型的数据,因此需要把它转化为纯String类型,这样就不会报错了。
报错的地方类似于这样。

//获取单元格
XSSFCell cell = row.getCell(0);
//获取单元格数据
String cellValue = cell.getStringCellValue();

在number类型转化为String类型的过程中造成了Cannot get a STRING value from a NUMERIC cell这样的问题,因此需要在读取excel单元格数据转化之前设置单元格类型为String,代码如下。

//获取单元格
XSSFCell cell = row.getCell(0);
//设置单元格类型
cell.setCellType(CellType.STRING);
//获取单元格数据
String cellValue = cell.getStringCellValue();

3.2 poi导出Excel报错java.lang.NoClassDefFoundError: org/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorkbook$Factoryat

Exception in thread "main" java.lang.NoClassDefFoundError: org/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorkbook$Factoryat org.apache.poi.xssf.usermodel.XSSFWorkbook.onWorkbookCreate(XSSFWorkbook.java:436)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:238)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:229)
at exportexcel.BuildXLSX.main(BuildXLSX.java:35)
Caused by: java.lang.ClassNotFoundException: org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook$Factory
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 4 more

错误原因:

未导入poi-ooxml-schema jar包。我使用的是poi-3.15 , 应该是poi-ooxml-schemas-3.15.jar包

以上就是JAVA如何读取Excel数据的详细内容,更多关于JAVA读取Excel数据的资料请关注脚本之家其它相关文章!

相关文章

  • Java 快速排序(QuickSort)原理及实现代码

    Java 快速排序(QuickSort)原理及实现代码

    这篇文章主要介绍了Java 快速排序(QuickSort)原理及实现代码,有需要的朋友可以参考一下
    2014-01-01
  • 基于Spring Web Jackson对RequestBody反序列化失败的解决

    基于Spring Web Jackson对RequestBody反序列化失败的解决

    这篇文章主要介绍了基于Spring Web Jackson对RequestBody反序列化失败的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Mybatis 自定义类型处理器示例详解

    Mybatis 自定义类型处理器示例详解

    在某些情况下我们需要对类型做处理,例如数据存储的是Long,程序里是BigDecimal,那么我们出库入库都需要做处理,此时就可以使用类型处理器,本文通过示例给大家介绍Mybatis 自定义类型处理器的相关知识,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询

    MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询

    本文主要介绍了MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • MybatisPlus 自定义.vm模板的生成

    MybatisPlus 自定义.vm模板的生成

    为更加快捷方便的开发代码,使用MybatisPlus的代码自动生成功能,将一些繁琐的操作自动生成,本文主要介绍了MybatisPlus 自定义.vm模板的生成,感兴趣的可以了解一下
    2024-03-03
  • 详解Spring Boot实战之Rest接口开发及数据库基本操作

    详解Spring Boot实战之Rest接口开发及数据库基本操作

    本篇文章主要介绍了Spring Boot实战之Rest接口开发及数据库基本操作,具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07
  • SpringBoot中使用MongoDB的连接池配置

    SpringBoot中使用MongoDB的连接池配置

    由于MongoDB的客户端本身就是一个连接池,因此,我们只需要配置客户端即可,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Java中的JVM虚拟机内存分配详解

    Java中的JVM虚拟机内存分配详解

    这篇文章主要介绍了Java中的JVM虚拟机内存分配详解,虚拟机是一种能够执行 Java 字节码的虚拟机,它是 Java 语言的核心组成部分,负责将 Java 代码转换为机器码并执行,JVM 提供了内存管理、垃圾回收、线程管理等功能,需要的朋友可以参考下
    2023-10-10
  • idea查看class字节码的示例代码

    idea查看class字节码的示例代码

    本文给大家分享三种方法介绍idea查看class字节码,每种方法给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-04-04
  • Guava事件总线应用场景最佳实践

    Guava事件总线应用场景最佳实践

    这篇文章主要为大家介绍了Guava事件总线应用场景最佳实践,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论