返回
如何将 XLSX 表格无缝转换为 Java 对象?Apache POI 详解
java
2024-03-03 14:38:54
将 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. 如何提高转换性能?
可以通过使用迭代器和批量处理技术来提高转换性能。