Apache POI
Apache POI
Apache POI 是一个处理Miscorsoft Office各种文件格式的开源项目。简单来说,我们可以使用POI在Java 程序中对Miscorsoft Office文件进行读写操作
- 一般情况下都是用于操作
Excel文件
应用场景
- 各种业务系统导出
Excel报表 - 批量导入业务数据
使用方式
- 添加依赖
<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);
}
}