POI基础用法

POI功能相当强大,几乎可以操作Office所有的文档,具体对应关系如下:

HSSF - Excel 2003及以前
XSSF - Excel 2007及以后
HWPF - Word
HSLF - PPT
HDGF - Visio

本文主要讨论适用于较新版本Excel对应的XSSFWorkbook。
Excel主要包含的属性主要有Sheet、Cell(单元格)、Font(文字)、Style(样式)。对应的POI中也提供了响应的对象。

XSSFWorkbook类

对应了一个Excel文件,可以创建Sheet和一些样式等。具体可参考:
http://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/XSSFWorkbook.html
常用必用方法包含如下:

返回类型 方法 简介
XSSFSheet createSheet() 创建一个XSSFSheet本工作簿
XSSFFont createFont() 创建一个新的字体
XSSFFont createCellStyle() 创建一个新的单元格样式

XSSFSheet类

要获取表格中的数据或向表格输入数据,必须要对Sheet进行操作,对应的就是Excel底部的页面标签。
Sheet标签
更多方法可参考官方文档:https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFSheet.html
常用必用方法包含如下:

返回类型 方法 简介
XSSFRow getRow(int index) 获取指定的行(从0开始)
Iterator iterator() 对行进行遍历
void autoSizeColumn(int column) 设置指定列(从0开始)自动适应宽度
int addMergedRegion(CellRangeAddress region) 合并单元格

XSSFRow类

通过Sheet获取到Row之后,可以对行上的单元格Cell进行操作了。
完整方法可参考官方文档:https://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/XSSFRow.html
常用必用方法包含如下:

返回类型 方法 简介
XSSFCell getCell(int cellnum) 获取指定列(从0开始)上的单元格
XSSFCell createCell(int columnIndex) 在指定列(从0开始)上新建一个单元格
Iterator cellIterator() 对该行的单元格进行遍历

XSSFCell类

针对单元格,可以进行输入数据、获取数据、设置样式等操作。
完整方法可参考官方文档:https://poi.apache.org/apidocs/dev/org/apache/poi/xssf/usermodel/XSSFCell.html
常用方法包含如下:

返回类型 方法 简介
XXX getXXXCellValue() 获取单元格指定的XXX格式的数据值,例如getStringCellValue
void setCellValue(XXX value) 对单元格设置类型为XXX的数据
void setCellType(CellType cellType) 对单元格设置数据类型
void setCellStyle(CellStyle style) 对单元格设置样式
void setHyperlink(Hyperlink hyperlink) 对单元格设置超链接

实例

以上就是一些POI最核心的类和一些基本的方法,知道这些之后,可以看如下一个实例:

依赖

POI的版本我选择了3.9,因为新版API略有改动,之前的代码,直接就贴出来了,使用新版API的话,下面的代码依旧可以运行,只是会有一些过期的方法。

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>

代码

每一步都有注释,复制就能运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.xssf.usermodel.*;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo {
public static void main(String[] args) {
//1.申请workbook对象
XSSFWorkbook workbook = new XSSFWorkbook();
//新建一个Sheet
XSSFSheet sheet = workbook.createSheet("test");
//创建第一行,直接获取会NullPointerException
XSSFRow row = sheet.createRow(0);
//创建第一行第一列的那个单元格
XSSFCell cell = row.createCell(0);

//单元格数据类型设置为String,值为“哈哈”
cell.setCellType(XSSFCell.CELL_TYPE_STRING);
cell.setCellValue("哈哈");

//单元格设置超链接
Hyperlink link = workbook.getCreationHelper().createHyperlink(Hyperlink.LINK_URL);
link.setAddress("http://blog.hayye.cn");
link.setLabel("young's blog");
cell.setHyperlink(link);

//设置单元格样式
XSSFCellStyle cellStyle = workbook.createCellStyle();
XSSFFont font = workbook.createFont();
//设置字体为红色
font.setColor(HSSFColor.RED.index);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);

//合并了0到1行且0到2列的单元格
sheet.addMergedRegion(new CellRangeAddress(0,1,0,2));

//输出Excel文档
FileOutputStream out = null;
try {
out = new FileOutputStream(new File("E://test.xlsx"));
workbook.write(out);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

运行结果

运行结果