如何使用 Java 中的 API 从 Excel 电子表格获取单元格数据


在 Java 中,你可以使用 Apache POI 库来读取 Excel 电子表格的单元格数据。以下是一个简单的示例,演示如何使用 Apache POI 读取 Excel 单元格数据:

  1. 添加 Maven 依赖项

在你的 Maven 项目的 pom.xml 文件中添加以下依赖项:

<dependencies>
    <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>
</dependencies>
  1. Java 代码

以下是一个简单的 Java 代码示例,演示如何从 Excel 电子表格中获取单元格数据:

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

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ExcelReader {

    public static void main(String[] args) {
        try {
            readExcel("example.xlsx");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void readExcel(String filePath) throws IOException {
        FileInputStream fileInputStream = new FileInputStream(new File(filePath));

        // 根据文件后缀(xls/xlsx)进行判断
        Workbook workbook;
        if (filePath.endsWith(".xls")) {
            workbook = new HSSFWorkbook(fileInputStream);
        } else if (filePath.endsWith(".xlsx")) {
            workbook = new XSSFWorkbook(fileInputStream);
        } else {
            throw new IllegalArgumentException("Not a valid Excel file");
        }

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

        // 遍历行
        for (Row row : sheet) {
            // 遍历单元格
            for (Cell cell : row) {
                // 获取单元格内容
                String cellValue = getCellValue(cell);
                System.out.print(cellValue + "\t");
            }
            System.out.println();
        }

        // 关闭 workbook 和文件流
        workbook.close();
        fileInputStream.close();
    }

    public static String getCellValue(Cell cell) {
        if (cell == null) {
            return "";
        }

        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                return String.valueOf(cell.getNumericCellValue());
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            default:
                return "";
        }
    }
}

在这个示例中,readExcel 方法打开 Excel 文件,获取第一个工作表,并遍历所有行和单元格。getCellValue 方法用于获取单元格的值,不同类型的单元格采用不同的处理方式。请根据实际需求进行适当的调整。

继续讨论从 Excel 电子表格中获取单元格数据的 Java API,以下是一些可能的额外信息:

  1. 日期格式处理

    如果单元格包含日期值,可以通过检查单元格的日期格式进行处理。在 getCellValue 方法中,你可以添加处理日期格式的逻辑。例如:

    case NUMERIC:
        if (DateUtil.isCellDateFormatted(cell)) {
            return cell.getDateCellValue().toString();
        } else {
            return String.valueOf(cell.getNumericCellValue());
        }
  2. 处理合并单元格

    如果你的 Excel 表格包含合并单元格,可以使用 sheet.getMergedRegion(int index) 来获取合并单元格的区域。然后,你可以根据合并单元格的起始行和列,以及当前行和列的关系来确定是否需要显示相同的数据。以下是一个简单的示例:

    // 获取所有合并单元格区域
    for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
        CellRangeAddress region = sheet.getMergedRegion(i);
        int mergedStartRow = region.getFirstRow();
        int mergedEndRow = region.getLastRow();
        int mergedStartCol = region.getFirstColumn();
        int mergedEndCol = region.getLastColumn();
    
        // 检查当前单元格是否在合并单元格区域内
        if (row.getRowNum() >= mergedStartRow && row.getRowNum() <= mergedEndRow
                && cell.getColumnIndex() >= mergedStartCol && cell.getColumnIndex() <= mergedEndCol) {
            // 处理合并单元格数据
            // 你可以在这里返回合并单元格的值
        }
    }
  3. 错误处理

    在实际应用中,你可能需要添加更多的错误处理逻辑,以确保对于不同类型的 Excel 文件都能正确处理。例如,可以添加对工作表是否存在、单元格是否为空等的检查。

请根据实际需求和你的 Excel 文件格式进行适当的调整。希望这些信息能够帮助你成功读取 Excel 电子表格中的数据。


原文链接:codingdict.net