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格式文件的数据的读取
-
引入包依赖关系
<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>
-
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格式文件的数据的读取
-
引入包依赖关系(同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>
-
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文件