一、POI介绍
? POI(Poor Obfuscation Implementation)是Apache提供的操作ms office格式文档的API。本文主要针对excel进行操作。使用POI可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel。**
主要结构:
? HSSF : 它被用来读取和写入MS-Excel文件的xls格式
? XSSF : 它是用于MS-Excel中XLSX文件格式
? HWPF : 它是用来读取和写入MS-Word的文档扩展名的文件
? XWPF : 它是用来读取和写入MS-Word的docx扩展名的文件
? HSLF : 它是用于读取,创建和编辑PowerPoint演示文稿
? HDGF : 它包含类和方法为MS-Visio的二进制文件
? HPBF : 它被用来读取和写入MS-Publisher文件
二、针对Excel的导入到处操作
1、导入jar包
Maven方式
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
2、读取excel文件
2.1读取xls格式的excel文件
? 使用的工作簿对象为HSSFWorkbook
@Test
public void readXlsx() throws Exception {
//创建输入流
FileInputStream fis = new FileInputStream("C:\\Users\\xuanxuan\\Desktop\\a.xls");
//由输入流得到工作簿对象
HSSFWorkbook workbook = new HSSFWorkbook(fis);
//得到工作表
//workbook.getSheet("sheet1");//根据名字获得工作表
HSSFSheet sheet = workbook.getSheetAt(0);//根据索引获得工作表
//获得第1行
HSSFRow row = sheet.getRow(0);
//获得第一行的第一列
HSSFCell cell = row.getCell(0);
//打印第一行第一列的内容
System.out.println(cell.getStringCellValue());
}
2.2读取xlsx格式的excel文件
?
/**
* 读取xlsx后缀的excel文件
*/
@Test
public void readXlsx() throws Exception {
//创建输入流
FileInputStream fis = new FileInputStream("C:\\Users\\xuanxuan\\Desktop\\b.xlsx");
//根据输入流获取工作簿对象
XSSFWorkbook workbook = new XSSFWorkbook(fis);
//根据工作簿获得表对象
XSSFSheet sheet = workbook.getSheetAt(0);
//获取第一行
XSSFRow row = sheet.getRow(0);
//获取第一列
XSSFCell cell = row.getCell(0);
//得到第一行第一列内容
String value = cell.getStringCellValue();
System.out.println(value);
}
2.3读取Excel文件中的所有内容
注:
int cellType = cell.getCellType();获取单元格类型,返回值为int类型
cell.getCellTypeEnum();//获取单元格类型,返回值是枚举,个人不常用这个
CellType 类型 值
CELL_TYPE_NUMERIC 数值型 0
CELL_TYPE_STRING 字符串型 1
CELL_TYPE_FORMULA 公式型 2
CELL_TYPE_BLANK 空值 3
CELL_TYPE_BOOLEAN 布尔型 4
CELL_TYPE_ERROR 错误 5
/**
* 读取Excel文件中的所有内容
*/
@Test
public void readExcelAllValue() throws Exception {
//创建输入流
FileInputStream fis = new FileInputStream("C:\\Users\\xuanxuan\\Desktop\\b.xlsx");
//根据输入流获取工作簿对象
XSSFWorkbook workbook = new XSSFWorkbook(fis);
//根据工作簿获得表对象
XSSFSheet sheet = workbook.getSheetAt(0);
//获取最后一行的行数
int rows = sheet.getLastRowNum();
for(int i=0 ; i<=rows ; i++){
//获得每一行的
XSSFRow row = sheet.getRow(i);
//获得最后一列的列数
short cells = row.getLastCellNum();
for(int j=0 ; j<=cells ; j++){
XSSFCell cell = row.getCell(j);//获得每一列
//判断是否单元格为空
if (cell == null){continue;}
//cell.getCellTypeEnum();//获取单元格类型,返回值是枚举,个人不常用这个
// int cellType = cell.getCellType();获取单元格类型,返回值为int类型
//获取单元格的内容
String value = cell.getStringCellValue();
System.out.print(value+"----");
}
System.out.println();//每行换一下行
}
}