返回

如何将 XLSX 表格无缝转换为 Java 对象?Apache POI 详解

java

将 XLSX 表格无缝转换为 Java 对象:Apache POI 的强大转换

问题

你有这样的一个 XLSX 表格:

emp_no emp_name
01 anand
02 kumar

你的目标是将此表格中的数据转换为以下 Java 对象:

class Employee {
    String empNo;
    String empName;
}

Apache POI:你的 XLSX 转换盟友

Apache POI 是 Java 的一个流行库,它提供了操作 Microsoft Office 文档的 API,包括 XLSX 工作表。借助 Apache POI,你可以轻松地将 XLSX 表格中的数据转换为 Java 对象。

解决方案:一步步转换

1. 导入依赖项:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.2</version>
</dependency>

2. 创建 Java 类:

public class Employee {

    private String empNo;
    private String empName;

    // Getter and setter methods
}

3. 读取 XLSX 表格:

XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream("employees.xlsx"));

4. 获取工作表:

XSSFSheet sheet = workbook.getSheetAt(0); // 0 表示第一张工作表

5. 创建对象列表:

List<Employee> employees = new ArrayList<>();

6. 使用 Apache POI API 转换数据:

for (Row row : sheet) {
    if (row.getRowNum() == 0) {
        continue; // 跳过标题行
    }

    Employee employee = new Employee();
    employee.setEmpNo(row.getCell(0).getStringCellValue());
    employee.setEmpName(row.getCell(1).getStringCellValue());

    employees.add(employee);
}

示例:将代码付诸实践

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ExcelToJavaObject {

    public static void main(String[] args) throws IOException {
        // 读取 xlsx 文件
        XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream("employees.xlsx"));

        // 获取工作表
        XSSFSheet sheet = workbook.getSheetAt(0);

        // 创建 Employee 对象列表
        List<Employee> employees = new ArrayList<>();

        // 遍历工作表中的行
        for (Row row : sheet) {
            if (row.getRowNum() == 0) {
                continue; // 跳过标题行
            }

            Employee employee = new Employee();
            employee.setEmpNo(row.getCell(0).getStringCellValue());
            employee.setEmpName(row.getCell(1).getStringCellValue());

            employees.add(employee);
        }

        // 打印转换后的数据
        for (Employee employee : employees) {
            System.out.println(employee);
        }
    }

    private static class Employee {
        private String empNo;
        private String empName;

        public String getEmpNo() {
            return empNo;
        }

        public void setEmpNo(String empNo) {
            this.empNo = empNo;
        }

        public String getEmpName() {
            return empName;
        }

        public void setEmpName(String empName) {
            this.empName = empName;
        }

        @Override
        public String toString() {
            return "Employee{" +
                    "empNo='" + empNo + '\'' +
                    ", empName='" + empName + '\'' +
                    '}';
        }
    }
}

常见问题解答

1. 是否可以转换更复杂的数据结构?

是,可以使用更高级的 Apache POI 功能,例如映射器和转换器,来处理更复杂的数据结构。

2. 如何处理空值?

使用 if 语句或 Apache POI 的 isNull() 方法来检查空值,并相应地处理它们。

3. 如何只转换特定列?

使用 getColumns 方法指定要转换的列的索引。

4. 是否可以将 Java 对象写回到 XLSX 表格?

是,使用 XSSFWorkbook#write 方法即可实现。

5. 如何提高转换性能?

可以通过使用迭代器和批量处理技术来提高转换性能。