java里怎么获取excel里数据

java里怎么获取excel里数据

在Java中获取Excel数据的几种方法包括:使用Apache POI库、使用JExcelApi库、使用第三方库如EasyExcel。这些方法能够帮助你读取、处理和分析Excel数据。

其中,Apache POI 是一个强大的库,用于处理Microsoft Office文档,包括Excel。它支持读取和写入Excel文件,可以处理各种Excel格式,如xls和xlsx。以下是详细描述如何使用Apache POI库来获取Excel数据的步骤。

一、使用Apache POI库读取Excel数据

Apache POI是一个开源的Java库,用于处理Microsoft Office文档。它支持Excel文件的读取和写入,是处理Excel文件的首选工具之一。

1、添加Apache POI依赖

首先,你需要在项目中添加Apache POI的依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖:

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml</artifactId>

<version>5.2.3</version>

</dependency>

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi</artifactId>

<version>5.2.3</version>

</dependency>

2、读取Excel文件

接下来,你可以编写代码来读取Excel文件中的数据。以下是一个简单的示例,用于读取Excel文件中的数据并打印出来:

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

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

import java.io.FileInputStream;

import java.io.IOException;

public class ExcelReader {

public static void main(String[] args) {

String excelFilePath = "path/to/excel/file.xlsx";

try (FileInputStream fis = new FileInputStream(excelFilePath);

Workbook workbook = new XSSFWorkbook(fis)) {

Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

for (Row row : sheet) {

for (Cell cell : row) {

switch (cell.getCellType()) {

case STRING:

System.out.print(cell.getStringCellValue() + "t");

break;

case NUMERIC:

System.out.print(cell.getNumericCellValue() + "t");

break;

case BOOLEAN:

System.out.print(cell.getBooleanCellValue() + "t");

break;

default:

System.out.print("UNKNOWNt");

break;

}

}

System.out.println();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

3、处理不同类型的单元格

在读取Excel数据时,可能会遇到不同类型的单元格,如字符串、数值、布尔值等。为了正确处理这些数据,你需要使用CellType来判断单元格的类型,并相应地处理它们。

switch (cell.getCellType()) {

case STRING:

System.out.print(cell.getStringCellValue() + "t");

break;

case NUMERIC:

if (DateUtil.isCellDateFormatted(cell)) {

System.out.print(cell.getDateCellValue() + "t");

} else {

System.out.print(cell.getNumericCellValue() + "t");

}

break;

case BOOLEAN:

System.out.print(cell.getBooleanCellValue() + "t");

break;

case FORMULA:

System.out.print(cell.getCellFormula() + "t");

break;

default:

System.out.print("UNKNOWNt");

break;

}

4、读取指定单元格的数据

有时候你可能只需要读取特定单元格的数据。你可以使用行和列索引来访问特定单元格的数据:

int rowIndex = 1; // 第二行

int colIndex = 2; // 第三列

Row row = sheet.getRow(rowIndex);

Cell cell = row.getCell(colIndex);

if (cell != null) {

switch (cell.getCellType()) {

case STRING:

System.out.println(cell.getStringCellValue());

break;

case NUMERIC:

System.out.println(cell.getNumericCellValue());

break;

case BOOLEAN:

System.out.println(cell.getBooleanCellValue());

break;

default:

System.out.println("UNKNOWN");

break;

}

}

二、使用JExcelApi库读取Excel数据

JExcelApi是另一个处理Excel文件的Java库,尽管它不如Apache POI那么流行,但它在某些情况下仍然非常有用。以下是如何使用JExcelApi读取Excel文件的步骤。

1、添加JExcelApi依赖

首先,确保在项目中添加了JExcelApi的依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖:

<dependency>

<groupId>net.sourceforge.jexcelapi</groupId>

<artifactId>jxl</artifactId>

<version>2.6.12</version>

</dependency>

2、读取Excel文件

以下是一个简单的示例,用于读取Excel文件中的数据并打印出来:

import jxl.Cell;

import jxl.Sheet;

import jxl.Workbook;

import java.io.File;

import java.io.IOException;

public class JExcelApiReader {

public static void main(String[] args) {

String excelFilePath = "path/to/excel/file.xls";

try {

Workbook workbook = Workbook.getWorkbook(new File(excelFilePath));

Sheet sheet = workbook.getSheet(0); // 获取第一个工作表

for (int i = 0; i < sheet.getRows(); i++) {

for (int j = 0; j < sheet.getColumns(); j++) {

Cell cell = sheet.getCell(j, i);

System.out.print(cell.getContents() + "t");

}

System.out.println();

}

workbook.close();

} catch (IOException | jxl.read.biff.BiffException e) {

e.printStackTrace();

}

}

}

3、处理不同类型的单元格

JExcelApi不像Apache POI那样提供丰富的单元格类型支持,但你仍然可以通过CellType来判断单元格的类型,并相应地处理它们。

Cell cell = sheet.getCell(j, i);

switch (cell.getType()) {

case LABEL:

System.out.print(cell.getContents() + "t");

break;

case NUMBER:

System.out.print(cell.getContents() + "t");

break;

case BOOLEAN:

System.out.print(cell.getContents() + "t");

break;

default:

System.out.print("UNKNOWNt");

break;

}

三、使用EasyExcel库读取Excel数据

EasyExcel是阿里巴巴开源的一个高性能、简单易用的Excel处理库。它支持读取和写入Excel文件,性能优于Apache POI,特别是在处理大文件时。

1、添加EasyExcel依赖

首先,在项目中添加EasyExcel的依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖:

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>easyexcel</artifactId>

<version>3.0.5</version>

</dependency>

2、读取Excel文件

以下是一个简单的示例,用于读取Excel文件中的数据并打印出来:

import com.alibaba.excel.EasyExcel;

import com.alibaba.excel.read.listener.ReadListener;

import com.alibaba.excel.read.listener.ReadListenerImpl;

public class EasyExcelReader {

public static void main(String[] args) {

String excelFilePath = "path/to/excel/file.xlsx";

EasyExcel.read(excelFilePath, new ReadListenerImpl()).sheet().doRead();

}

}

3、自定义读取数据的监听器

为了处理读取的数据,你需要实现ReadListener接口。以下是一个自定义的读取数据的监听器示例:

import com.alibaba.excel.context.AnalysisContext;

import com.alibaba.excel.read.listener.ReadListener;

import java.util.ArrayList;

import java.util.List;

public class ReadListenerImpl<T> implements ReadListener<T> {

private List<T> dataList = new ArrayList<>();

@Override

public void invoke(T data, AnalysisContext context) {

dataList.add(data);

System.out.println(data);

}

@Override

public void doAfterAllAnalysed(AnalysisContext context) {

System.out.println("All data read finished.");

}

public List<T> getDataList() {

return dataList;

}

}

4、读取指定类型的Excel数据

有时候,你可能希望将Excel数据映射到特定的Java对象中。你可以定义一个Java类来表示Excel数据,并在读取时指定该类的类型:

import com.alibaba.excel.annotation.ExcelProperty;

public class ExcelData {

@ExcelProperty("Name")

private String name;

@ExcelProperty("Age")

private Integer age;

// Getter and Setter methods

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

@Override

public String toString() {

return "ExcelData{" +

"name='" + name + ''' +

", age=" + age +

'}';

}

}

然后,在读取Excel文件时指定该类的类型:

public class EasyExcelReader {

public static void main(String[] args) {

String excelFilePath = "path/to/excel/file.xlsx";

EasyExcel.read(excelFilePath, ExcelData.class, new ReadListenerImpl<ExcelData>()).sheet().doRead();

}

}

四、总结

在Java中读取Excel数据有多种方法,其中Apache POIJExcelApiEasyExcel是最常用的三种库。Apache POI功能强大,支持多种Excel格式,但性能相对较低;JExcelApi较为简单,但不支持.xlsx格式;EasyExcel性能优异,适合处理大文件。根据具体需求选择合适的库,可以高效地读取和处理Excel数据。

相关问答FAQs:

1. 如何在Java中读取Excel文件?

  • 使用Apache POI库可以方便地读取Excel文件。你可以通过以下步骤来获取Excel文件中的数据:
    • 导入Apache POI库的依赖。
    • 创建一个File对象,指定Excel文件的路径。
    • 使用FileInputStream读取Excel文件。
    • 根据文件类型(xls或xlsx),创建Workbook对象。
    • 获取工作表(Sheet)对象。
    • 遍历工作表的行和列,获取单元格的数据。

2. 如何从Excel文件中提取特定的数据?

  • 一旦你成功读取了Excel文件,你可以使用Java代码来提取特定的数据。以下是一些方法:
    • 根据行和列的索引,使用getRow()getCell()方法获取特定单元格的数据。
    • 使用getPhysicalNumberOfRows()getLastCellNum()方法获取行数和列数。
    • 遍历行和列,使用条件语句来筛选所需的数据。

3. 我应该使用哪个库来获取Excel数据,Apache POI还是JExcel?

  • Apache POI和JExcel都是Java中常用的读取和写入Excel文件的库。选择哪个库取决于你的需求和偏好:
    • 如果你需要支持最新版本的Excel文件(.xlsx格式),Apache POI是更好的选择。
    • 如果你需要处理旧版本的Excel文件(.xls格式),JExcel可能更适合。
    • Apache POI提供了更多的功能和灵活性,但也更复杂一些。
    • 在选择之前,你可以尝试使用两个库的示例代码,看哪个更符合你的需求和开发习惯。

文章包含AI辅助创作,作者:Edit1,如若转载,请注明出处:https://docs.pingcode.com/baike/4049326

(0)
Edit1Edit1
免费注册
电话联系

4008001024

微信咨询
微信咨询
返回顶部