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

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表中的数据内容

java读取excel中的数据(包括.xlsx和.xls)_第1张图片java读取excel中的数据(包括.xlsx和.xls)_第2张图片

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

  • 一、.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.(HeaderBlock.java:130)
	at org.apache.poi.poifs.storage.HeaderBlock.(HeaderBlock.java:117)
	at org.apache.poi.poifs.filesystem.POIFSFileSystem.(POIFSFileSystem.java:294)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.(HSSFWorkbook.java:400)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.(HSSFWorkbook.java:381)
	at com.kejizhentan.util.ReadExcel.main(ReadExcel.java:14)
```

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

你可能感兴趣的:(java,java,poi,excel)