Apache POI

Apache POI

Apache POI 是一个处理Miscorsoft Office各种文件格式的开源项目。简单来说,我们可以使用POIJava 程序中对Miscorsoft Office文件进行读写操作

  • 一般情况下都是用于操作Excel文件

应用场景

  • 各种业务系统导出Excel报表
  • 批量导入业务数据

使用方式

  1. 添加依赖

<dependencys>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.16</version>
    </dependency>

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.16</version>
    </dependency>
</dependencys>

使用示例

package com.sky.text;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

public class ApachePOITest {
    @Test
    //写入操作
    public void testWriteExcel() throws Exception {
        //在内存中创建一个Excel文件
        XSSFWorkbook sheets = new XSSFWorkbook();
        //在Excel文件中创建一个工作簿 sheet页
        XSSFSheet sheet = sheets.createSheet("员工信息");
        //工作簿中创建行
        XSSFRow row = sheet.createRow(0);
        //在行中创建单元格
        XSSFCell cell = row.createCell(0);
        //设置单元格内容
        cell.setCellValue("员工编号");
        //向第一行的第二个单元格中写入数据
        row.createCell(1).setCellValue("员工姓名");
        //向第一行的第三个单元格中写入数据
        row.createCell(2).setCellValue("员工密码");
        //向第一行的第四个单元格中写入数据
        row.createCell(3).setCellValue("员工手机");

        //在第二行中添加数据
        row = sheet.createRow(1);
        //设置员工编号
        row.createCell(0).setCellValue("1");
        row.createCell(1).setCellValue("张三");
        row.createCell(2).setCellValue("123456");
        row.createCell(3).setCellValue("13800138000");

        //通过输出流将内存中的Excel文件保存到磁盘中
        FileOutputStream fileOutputStream = new FileOutputStream(new File("E:\\desktop\\emp.xlsx"));
        //写出数据
        sheets.write(fileOutputStream);

        //关闭资源
        sheets.close();
        fileOutputStream.close();

    }

    @Test
    //读取操作
    public void testReadExcel() throws Exception {
        FileInputStream fileInputStream = new FileInputStream(new File("E:\\desktop\\emp.xlsx"));
        //获取工作簿
        XSSFWorkbook sheets = new XSSFWorkbook(fileInputStream);
        //获取工作簿中的第一个工作簿
        XSSFSheet sheet = sheets.getSheetAt(0);
        //使用工作薄的最后一行的索引进行遍历
        ArrayList<List<String>> list = new ArrayList<>();
        for (int i = 0; i <= sheet.getLastRowNum(); i++) {
            //获取工作簿中的第i行
            XSSFRow row = sheet.getRow(i);
            list.add(List.of(
                    //获取第i行中的第一个单元格
                    row.getCell(0).getStringCellValue(),
                    //获取第i行中的第二个单元格
                    row.getCell(1).getStringCellValue(),
                    //获取第i行中的第三个单元格
                    row.getCell(2).getStringCellValue(),
                    //获取第i行中的第四个单元格
                    row.getCell(3).getStringCellValue()
            ));
        }
        //循环完毕关闭资源
        sheets.close();
        fileInputStream.close();
        System.out.println(list);

    }
}
上次更新 2025/10/27 21:30:32