17370845950

java怎么操作Excel文件 通过POI或EasyExcel读写Excel文件
答案:Java操作Excel常用Apache POI和EasyExcel,前者适合小数据量及样式控制,后者适用于大数据量高性能场景。

Java操作Excel文件最常用的方式是使用Apache POI和EasyExcel。两者都能实现对Excel的读写,但适用场景略有不同。下面分别介绍它们的基本用法和特点。

1. 使用Apache POI读写Excel

Apache POI是Apache基金会提供的开源库,支持读写Microsoft Office格式文件,包括Excel(.xls和.xlsx)。

核心依赖:

在Maven项目中添加以下依赖:

对于XLS(2003格式):

  • poi: 最基础的包

对于XLSX(2007+格式):

  • poi-ooxml: 支持xlsx格式

完整依赖示例:


    org.apache.poi
    poi-ooxml
    5.2.3

写入Excel示例:

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

import java.io.FileOutputStream;

public class WriteExcel {
    public static void main(String[] args) throws Exception {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("用户数据");
        
        Row header = sheet.createRow(0);
        header.createCell(0).setCellValue("姓名");
        header.createCell(1).setCellValue("年龄");

        Row row = sheet.createRow(1);
        row.createCell(0).setCellValue("张三");
        row.createCell(1).setCellValue(25);

        try (FileOutputStream out = new FileOutputStream("users.xlsx")) {
            workbook.write(out);
        }
        workbook.close();
    }
}

读取Excel示例:

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

import java.io.FileInputStream;

public class ReadExcel {
    public static void main(String[] args) throws Exception {
        try (FileInputStream fis = new FileInputStream("users.xlsx");
             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;
                        default:
                            System.out.print("未知\t");
                    }
                }
                System.out.println();
            }
        }
    }
}

2. 使用EasyExcel读写Excel

EasyExcel是阿里巴巴开源的框架,基于POI封装,解决了大文件内存溢出问题,适合处理大量数据的导入导出。

优点:
  • 内存占用低:采用SAX模式逐行读取,不将整个文件加载到内存
  • API简单:通过注解绑定实体类,简化代码
  • 性能好:适合百万级数据处理
核心依赖:

    com.alibaba
    easyexcel
    3.3.2

定义数据模型:

public class User {
    private String name;
    private Integer age;
    
    // getter/setter 省略
}

写入Excel:

import com.alibaba.excel.EasyExcel;

import java.util.Arrays;
import java.util.List;

public class EasyWrite {
    public static void main(String[] args) {
        List data = Arrays.asList(
            new User("李四", 30),
            new User("王五", 28)
        );
        String fileName = "users_easy.xlsx";
        EasyExcel.write(fileName, User.class).sheet("模板").doWrite(data);
    }
}

读取Excel:

public class EasyRead {
    public static void main(String[] args) {
        String fileName = "users_easy.xlsx";
        EasyExcel.read(fileName, User.class, new PageReadListener(dataList -> {
            for (User user : dataList) {
                System.out.println("读取到:" + user.getName() + ", " + user.getAge());
            }
        })).sheet().doReadAll();
    }
}

3. POI vs EasyExcel 如何选择?

根据实际需求决定使用哪个工具:

  • 如果只是处理小量数据(几千行以内),结构复杂或需要样式控制,推荐使用Apache POI
  • 如果是大批量数据导入导出(如报表、日志),注重性能和稳定性,优先选择EasyExcel
  • EasyExcel更适合Web应用中的上传下载场景
  • POI更灵活,可以精确控制单元格样式、合并、图表等高级功能
基本上就这些。两种方式各有优势,理解清楚后按需选择即可。