java怎么把excel数据读出来

java怎么把excel数据读出来

在Java中读取Excel数据的方法包括Apache POI、JExcelAPI、EasyExcel等。本文将详细介绍使用Apache POI读取Excel数据的方法,因为它是目前最流行和功能强大的库之一。

Apache POI是一个开源的Java库,用于处理Microsoft Office文件,包括Excel。它支持读取和写入Excel文件格式,包括.xls和.xlsx。通过Apache POI,你可以方便地读取Excel文件中的数据,并将其导入到Java应用程序中。要使用Apache POI读取Excel数据,首先需要导入相关依赖库,然后创建一个工作簿对象,遍历工作表和单元格,提取所需的数据。

一、导入Apache POI库

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

<dependency>

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

<artifactId>poi</artifactId>

<version>5.0.0</version>

</dependency>

<dependency>

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

<artifactId>poi-ooxml</artifactId>

<version>5.0.0</version>

</dependency>

<dependency>

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

<artifactId>poi-ooxml-schemas</artifactId>

<version>4.1.2</version>

</dependency>

<dependency>

<groupId>org.apache.xmlbeans</groupId>

<artifactId>xmlbeans</artifactId>

<version>4.0.0</version>

</dependency>

这将引入Apache POI库及其相关的依赖项。

二、读取Excel文件

1、创建工作簿和工作表对象

首先,我们需要创建一个输入流来读取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/your/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("Unknown Cell Typet");

break;

}

}

System.out.println();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

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

在上面的代码中,我们遍历了工作表中的所有行和单元格,并根据单元格的类型进行了不同的处理。Apache POI支持多种单元格类型,包括字符串、数值和布尔值等。通过cell.getCellType()方法,我们可以获取单元格的类型,并使用相应的方法来读取单元格的值。

在实际应用中,你可能需要对数据进行进一步处理和验证,以确保数据的正确性和完整性。

三、处理不同格式的Excel文件

Apache POI支持两种主要的Excel文件格式:.xls(Excel 97-2003)和.xlsx(Excel 2007及更高版本)。我们需要根据文件的扩展名选择合适的工作簿实现类。

1、读取.xls文件

对于.xls文件,我们需要使用HSSFWorkbook类:

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ExcelReader {

public static void main(String[] args) {

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

try (FileInputStream fis = new FileInputStream(excelFilePath);

Workbook workbook = new HSSFWorkbook(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("Unknown Cell Typet");

break;

}

}

System.out.println();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

2、读取.xlsx文件

对于.xlsx文件,我们需要使用XSSFWorkbook类:

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

public class ExcelReader {

public static void main(String[] args) {

String excelFilePath = "path/to/your/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("Unknown Cell Typet");

break;

}

}

System.out.println();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

四、处理复杂的Excel文件

1、处理多工作表

在实际应用中,Excel文件可能包含多个工作表。我们可以使用workbook.getNumberOfSheets()方法获取工作簿中的工作表数量,并遍历所有的工作表。

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

import java.io.FileInputStream;

import java.io.IOException;

public class ExcelReader {

public static void main(String[] args) {

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

try (FileInputStream fis = new FileInputStream(excelFilePath);

Workbook workbook = new XSSFWorkbook(fis)) {

// 遍历所有工作表

for (int i = 0; i < workbook.getNumberOfSheets(); i++) {

Sheet sheet = workbook.getSheetAt(i);

System.out.println("Sheet Name: " + sheet.getSheetName());

// 遍历工作表中的行和单元格

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("Unknown Cell Typet");

break;

}

}

System.out.println();

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

2、处理合并单元格

在某些情况下,Excel文件中可能包含合并单元格。我们可以使用sheet.getMergedRegions()方法获取所有的合并区域,并处理这些合并单元格。

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

import org.apache.poi.ss.util.CellRangeAddress;

import java.io.FileInputStream;

import java.io.IOException;

import java.util.List;

public class ExcelReader {

public static void main(String[] args) {

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

try (FileInputStream fis = new FileInputStream(excelFilePath);

Workbook workbook = new XSSFWorkbook(fis)) {

// 获取第一个工作表

Sheet sheet = workbook.getSheetAt(0);

// 获取所有合并区域

List<CellRangeAddress> mergedRegions = sheet.getMergedRegions();

// 遍历工作表中的行和单元格

for (Row row : sheet) {

for (Cell cell : row) {

if (isMergedCell(cell, mergedRegions)) {

System.out.print("[MERGED] ");

}

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("Unknown Cell Typet");

break;

}

}

System.out.println();

}

} catch (IOException e) {

e.printStackTrace();

}

}

private static boolean isMergedCell(Cell cell, List<CellRangeAddress> mergedRegions) {

for (CellRangeAddress range : mergedRegions) {

if (range.isInRange(cell.getRowIndex(), cell.getColumnIndex())) {

return true;

}

}

return false;

}

}

五、处理日期和时间格式

在Excel文件中,日期和时间通常以数值形式存储。我们需要将这些数值转换为Java的日期对象。

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

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

import java.io.FileInputStream;

import java.io.IOException;

import java.text.SimpleDateFormat;

public class ExcelReader {

public static void main(String[] args) {

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

try (FileInputStream fis = new FileInputStream(excelFilePath);

Workbook workbook = new XSSFWorkbook(fis)) {

// 获取第一个工作表

Sheet sheet = workbook.getSheetAt(0);

// 日期格式化

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

// 遍历工作表中的行和单元格

for (Row row : sheet) {

for (Cell cell : row) {

switch (cell.getCellType()) {

case STRING:

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

break;

case NUMERIC:

if (DateUtil.isCellDateFormatted(cell)) {

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

} else {

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

}

break;

case BOOLEAN:

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

break;

default:

System.out.print("Unknown Cell Typet");

break;

}

}

System.out.println();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

六、总结

通过使用Apache POI库,我们可以方便地读取Excel文件中的数据,并将其导入到Java应用程序中。在实际应用中,你可能需要处理不同类型的单元格、多工作表、合并单元格以及日期和时间格式等复杂情况。希望本文的内容能够帮助你更好地理解如何在Java中读取Excel数据,并为你的项目提供实用的参考。

无论是简单的Excel文件还是复杂的多工作表、多格式文件,Apache POI都能提供强大的支持。充分利用这个库的功能,你可以轻松地处理各种Excel数据,提升项目的效率和可靠性。

相关问答FAQs:

1. 如何使用Java读取Excel文件中的数据?

使用Java读取Excel文件中的数据可以通过使用开源的Apache POI库来实现。POI库提供了丰富的API来处理Excel文件。您可以使用POI库中的Workbook和Sheet类来读取Excel文件中的数据,然后使用Cell类来获取单元格的值。

2. 在Java中,如何解析Excel文件并将数据读取到列表中?

要将Excel文件中的数据读取到Java列表中,您可以按照以下步骤进行操作:

  • 使用POI库加载Excel文件并创建Workbook对象。
  • 选择要读取的工作表,并创建Sheet对象。
  • 迭代每一行并获取单元格的值,将其存储到Java列表中。

例如,您可以使用for循环遍历每一行,并使用getCell方法获取每个单元格的值,并将其存储到列表中。

3. 如何处理Excel文件中的不同数据类型?

在Java中读取Excel文件时,您需要处理不同的数据类型,如文本、数字、日期等。POI库提供了不同的方法来处理不同的数据类型。

  • 如果单元格包含文本数据,您可以使用getCellStringValue方法来获取字符串值。
  • 如果单元格包含数字,您可以使用getNumericCellValue方法来获取数字值。
  • 如果单元格包含日期,您可以使用getDateCellValue方法来获取日期值。

请注意,在使用这些方法之前,您需要先判断单元格的数据类型,以避免出现异常。您可以使用getCellType方法来获取单元格的数据类型,并根据类型选择相应的方法来处理数据。

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

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

4008001024

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