Apache POI
Apache POI是Apache的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
操作Excel目前比较流行的就是Apache POI和阿里巴巴的easyExcel
使用场景
1.将用户信息导出为excel表格(导出数据)
2.将Excel表中的信息录入到网站数据库(上传)
基本功能
结构:
HSSF - 提供读写[Microsoft Excel](https://baike.baidu.com/item/Microsoft Excel)格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写[Microsoft Word](https://baike.baidu.com/item/Microsoft Word)格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写[Microsoft Visio](https://baike.baidu.com/item/Microsoft Visio)格式档案的功能。
导入依赖
<!-- 操作xls后缀的excel -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<!-- 操作xlsx后缀的excel -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
xls和xlsx的区别
xls最多65536条数据
xlsx可以存放无限条数据
Excel的结构
1.工作簿 2.工作表 3.行 4.列
代码
写
package com.licha;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.FileOutputStream;
/**
* User: Aurora
* Date: 2020/5/2
* Time: 16:22
* 写入数据
*/
public class ExcelWriteTest {
public static void main(String[] args) throws Exception {
/**
* 1.创建一个工作簿
* HSSFWorkbook 创建xls版本的
* SXSSFWorkbook 创建xlsx版本的
* XSSFWorkbook 可以写较大量的数据,但是速度慢,非常耗内存,会发生内存溢出
*/
Workbook workbook = new SXSSFWorkbook();
//2.创建一个工作表
Sheet sheet = workbook.createSheet("员工表");
//3.创建一行
Row row1 = sheet.createRow(0);
Row row2 = sheet.createRow(1);
//4.创建一列
Cell cell11 = row1.createCell(0);
Cell cell12 = row1.createCell(1);
Cell cell21 = row2.createCell(0);
Cell cell22 = row2.createCell(1);
cell11.setCellValue("姓名");
cell12.setCellValue("张顺爬");
cell21.setCellValue("年龄");
cell22.setCellValue("22");
//5.生成表
String path = "D:\\\\javaObj\\\\POI-EasyExcel";
FileOutputStream fileOutputStream = new FileOutputStream(path + "\\\\员工统计表.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
System.out.println("excel生成完毕");
}
}
读
package com.licha;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
/**
* User: Aurora
* Date: 2020/5/2
* Time: 21:29
*/
public class ExcelReadTest {
public static void main(String[] args) throws Exception{
String path = "D:\\\\javaObj\\\\POI-EasyExcel";
//1.读取excel信息
FileInputStream fileInputStream = new FileInputStream(path + "\\\\员工统计表.xlsx");
Workbook workbook = new XSSFWorkbook(fileInputStream);
//2.读取表信息
Sheet sheet = workbook.getSheet("员工表");
//3.取得行信息
Row row1 = sheet.getRow(0);
//4.取得列信息
Cell cell11 = row1.getCell(0);
System.out.println(cell11.getStringCellValue());
//取得当前行有多少列
System.out.println(row1.getPhysicalNumberOfCells());
//取得当前表有多少行
System.out.println(sheet.getPhysicalNumberOfRows());
//取得当前格的类型
System.out.println(cell11.getCellType());
}
}