Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。
一般情况下,POI 都是用于操作 Excel 文件。
1:引入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
2:将数据写入Excel文件
public class POITest {
/**
* 通过poi创建excel文件并写入文件内容
* @throws Exception
*/
public static void write() throws Exception{
//在内存中创建一个excel对象
XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
//创建sheet页
XSSFSheet sheet = xssfWorkbook.createSheet("info");
//在sheet中创建行,0代表第一行,1代表第二行
XSSFRow row = sheet.createRow(1);
//设置值
row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("城市");
XSSFRow row1 = sheet.createRow(2);
//设置值
row1.createCell(1).setCellValue("张三");
row1.createCell(2).setCellValue("深圳");
XSSFRow row2 = sheet.createRow(3);
//设置值
row2.createCell(1).setCellValue("李四");
row2.createCell(2).setCellValue("武汉");
FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\info.xlsx"));
//通过输出流将内存中得excel文件写到磁盘上去
xssfWorkbook.write(fileOutputStream);
//关闭资源
fileOutputStream.flush();
fileOutputStream.close();
xssfWorkbook.close();
}
public static void main(String[] args) throws Exception{
write();
}
}
实现效果:
3.读取Excel文件中的数据
package com.cdp.wcenter.wspace.modules.test.controller;
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 java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
/**
* description
* author kexiwang
* time 2024/7/10 16:04
*/
public class POITest {
/**
* 通过poi创建excel文件并写入文件内容
* @throws Exception
*/
public static void write() throws Exception{
//在内存中创建一个excel对象
XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
//创建sheet页
XSSFSheet sheet = xssfWorkbook.createSheet("info");
//在sheet中创建行,0代表第一行,1代表第二行
XSSFRow row = sheet.createRow(1);
//设置值
row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("城市");
XSSFRow row1 = sheet.createRow(2);
//设置值
row1.createCell(1).setCellValue("张三");
row1.createCell(2).setCellValue("深圳");
XSSFRow row2 = sheet.createRow(3);
//设置值
row2.createCell(1).setCellValue("李四");
row2.createCell(2).setCellValue("武汉");
FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\info.xlsx"));
//通过输出流将内存中得excel文件写到磁盘上去
xssfWorkbook.write(fileOutputStream);
//关闭资源
fileOutputStream.flush();
fileOutputStream.close();
xssfWorkbook.close();
}
/**
* 读取Excel文件中的数据
* @throws Exception
*/
public static void read() throws Exception{
FileInputStream inputStream = new FileInputStream(new File("D:\\info.xlsx"));
//通过输入流读取指定得excel文件
XSSFWorkbook sheets = new XSSFWorkbook(inputStream);
//获取Excel文件指定名为info的Sheet页
XSSFSheet xssfSheet = sheets.getSheet("info");
//获取Sheet页中的最后一行的行号
int lastRowNum = xssfSheet.getLastRowNum();
for (int i = 1; i <= lastRowNum; i++) {
//获取指定的行
XSSFRow row = xssfSheet.getRow(i);
//获取行的第二个单元格中的内容
String stringCellValue1 = row.getCell(1).getStringCellValue();
//获取行的第三个单元格中的内容
String stringCellValue2 = row.getCell(2).getStringCellValue();
System.out.println(stringCellValue1+" "+stringCellValue2);
//关闭资源
inputStream.close();
sheets.close();
}
}
public static void main(String[] args) throws Exception{
//write();
read();
}
}
实现效果: