首页  > 世界杯开幕式

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

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

一、.xlsx格式文件的数据的读取

引入包依赖关系

4.0.0

com.kejizhentan

poiReadExcel

0.0.1-SNAPSHOT

org.apache.poi

poi

4.1.0

org.apache.poi

poi-ooxml

4.1.0

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

//读取第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)

4.0.0

com.kejizhentan

poiReadExcel

0.0.1-SNAPSHOT

org.apache.poi

poi

4.1.0

org.apache.poi

poi-ooxml

4.1.0

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

//读取第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文件