Apache POI
Apache POI
介绍:
- 一个用于处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用POI在Java程序中对Miscrosoft Office各种文件进行读写操作;
- 一帮情况下,POI都是用于操作Excel文件;
应用场景:
- 银行网银系统导出交易明细;
- 各种业务系统导出Excel报表;
- 批量导入业务数据;
maven坐标:
<!-- 支持xls文件 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.0</version>
</dependency>
<!-- 支持xlsx文件 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.0</version>
</dependency>
Apache POI常用方法:
XSSFWorkbook类方法:
- new XSSFWorkbook():使用无参构造方法,在内存中创建一个Excel文件;返回值为XSSFWorkbook对象;
- new XSSFWorkbook(参数):
- 有参构造方法,通过输入流读取磁盘中已存在的Excel文件
- 参数为字节输入流,即FileInputStream对象;如:new FileInputStream(new File(”文件所在地址“));
- 返回值为XSSFWorkbook对象;
- createSheelt():普通方法,在Excel文件中创建一个Sheet页;返回XSSFSheet对象;
- getSheetAt(参数):
- 普通方法,读取Excel文件中的Sheet页;
- 参数为整数,为索引,从0开始,即0为第一个Sheet页;
- 返回值为XSSFSheet对象;
- write(参数):
- 普通方法:通过输出流将内存中的Excel文件写入到磁盘中;
- 参数为字节输出流,即FileOutputStream对象;如:new FileOutputStream(new File(”输出地址“));
- close():普通方法,用于关闭资源;
XSSFSheet类方法:
- createRow(参数):
- 普通方法,用于在Sheet页中创建行对象;
- 参数是整数类型,为rownum编号,即第几行,编号从0开始;如:0为第一行;
- 返回值为XSSFRow对象;
- getLastRowNum():普通方法,获取该Sheet页中最后一行的行号,行号从0开始;返回值是int类型;
- .getRow(参数):
- 普通方法,获取该Sheet页中的对应行;
- 参数为整数类型,为rownum编号,即获取第几行,编号从0开始;如:0为第一行;
- 返回值为XSSFRow对象;
XSSFRow类方法:
- createCell(参数):
- 普通方法,用于在该行创建单元格;
- 参数是整数类型,为第几个单元格,从0开始,即0为第一个单元格;
- 返回值为XSSFCell对象;
- getCell(参数):
- 普通方法,用于获取该行对应的单元格;
- 参数为整数类型,为获取第几个单元格,从0开始,即0为第一个单元格;
- 返回值为XSSFCell对象;
XSSFCell类方法:
- setCellValue(参数):
- 普通方法,用于在该单元格写入文件内容;
- 参数是字符串类型;
- getStringCellVaule():普通方法,获取该单元格中的内容;
通过POI创建Excel文件并且写入文件内容例子:
// 通过POI创建Excel文件并且写入文件内容
public static void write() throws IOException{
// 在内存中创建Excel文件
XSSFWorkbook excel = new XSSFWorkbook();
// 在Excel文件中创建Sheet
XSSFSheet sheet = excel.createSheet();
// 创建sheet页中的行
// 第一行
XSSFRow row = sheet.createRow(0);
// 在第一行内创建对应单元格并设置内容
row.createCell(0).setCellValue("班级");
row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("学号");
// 第二行
row = sheet.createRow(1);
// 第二行单元格设置内容
row.createCell(0).setCellValue("软件2202");
row.createCell(1).setCellValue("刘锐");
row.createCell(2).setCellValue("22120229");
// 第三行
row = sheet.createRow(2);
// 第三行单元格设置内容
row.createCell(0).setCellValue("软件2202");
row.createCell(1).setCellValue("蔡佳佳");
row.createCell(2).setCellValue("22120201");
// 创建输出流,使用输出流将内存中的Excel文件写进磁盘中;
FileOutputStream out = new FileOutputStream(new File("D:\\apply\\study\\software\\code\\test1\\文件\\info.xlsx"));
excel.write(out);
// 关闭资源
out.close();
excel.close();
}
通过POI读取Excel文件内容例子:
// 通过POI读取Excel文件内容
public static void read() throws IOException{
// 使用输入流获取excel文件
FileInputStream in = new FileInputStream(new File("D:\\apply\\study\\software\\code\\test1\\文件\\info.xlsx"));
XSSFWorkbook excel = new XSSFWorkbook(in);
// 获取excel文件Sheet页
XSSFSheet sheet = excel.getSheetAt(0);
// 获取Sheet页中的有数据的最后一行
int lastRowNum = sheet.getLastRowNum();
// 使用循环获取sheet页中的数据
for(int i=0;i<=lastRowNum;i++){
// 获取行
XSSFRow row = sheet.getRow(i);
// 获取该行单元格数据
String className = row.getCell(0).getStringCellValue();
String name = row.getCell(1).getStringCellValue();
String studentId = row.getCell(2).getStringCellValue();
// 打印数据
System.out.println(className + " " + name + " " + studentId);
}
// 关闭资源
in.close();
excel.close();
}