POI报表概述
需求说明
在企业级应用开发中,Excel报表是一种最常见的报表需求。Excel报表开发一般分为两种形式:
- 为了 方便操作,基于Excel的报表批量上传数据
- 通过java代码生成Excel报表
Excel的两种形式
目前世面上的Excel分为两个大的版本Excel2003和Excel2007及以上两个版本,两者之间的区别如下:
Excel 2003 | Excel 2007 | |
---|---|---|
后缀 | xls | xlsx |
结构 | 二进制格式,其核心结构是复合文档类型的结构 | XML类型结构 |
单sheet数据量 | 行:65535;列:256 | 行:1048576;列:16384 |
特点 | 存储容量有限 | 基于XML压缩,占用空间小,操作效率高 |
- Excel2003是一个特有的二进制格式,其核心结构是复合文档类型的结构,存储数据量较小
- Excel2007 的核心结构是 XML 类型的结构,采用的是基于 XML 的压缩方式,使其占用的空间更小,操作效率更高
常见Excel操作工具
Java中常见的用来操作Excl的方式一般有2种:JXL和POI。
- JXL只能对Excel进行操作,属于比较老的框架,它只支持到Excel 95-2000的版本。现在已经停止更新和维护;
- POI是apache的项目,可对微软的Word,Excel,Ppt进行操作,包括office2003和2007,Excl2003和2007;
- poi现在一直有更新,所以现在主流使用POI;
POI概述
Apache POI是Apache软件基金会的开源项目,由Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java语言操作Microsoft Office的功能。
POI的应用场景
- 数据报表生成
- 数据备份
- 数据批量上传
POI 的入门操作
搭建环境
pom.xml中引入依赖
<dependencies>
<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>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
POI结构说明
- HSSF提供读写Microsoft Excel XLS格式档案的功能。
- XSSF提供读写Microsoft Excel OOXML XLSX格式档案的功能。
- HWPF提供读写Microsoft Word DOC格式档案的功能。
- HSLF提供读写Microsoft PowerPoint格式档案的功能。
- HDGF提供读Microsoft Visio格式档案的功能。
- HPBF提供读Microsoft Publisher格式档案的功能。
- HSMF提供读Microsoft Outlook格式档案的功能
API介绍
API名称 | |
---|---|
Workbook | Excel的文档对象,针对不同的Excel类型分为:HSSFWorkbook(2003)和XSSFWorkbool(2007) |
Sheet | Excel的表单 |
Row | Excel的行 |
Cell | Excel的格子单元 |
Font | Excel字体 |
CellStyle | 格子单元样式 |
基本操作
1、创建Excel
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
/**
* 使用POI创建excel
*/
public class PoiTest01 {
public static void main(String[] args) throws Exception {
// 1.创建工作簿 HSSFWorkbook -- 2003
Workbook wb = new XSSFWorkbook(); //2007版本
// 2.创建表单sheet
Sheet sheet = wb.createSheet("test");
// 3.文件流
FileOutputStream pis = new FileOutputStream("E:/test.xlsx");
// 4.写入文件
wb.write(pis);
pis.close();
}
}
2、创建单元格
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.FileOutputStream;
/**
* 创建单元格写入内容
*/
public class PoiTest02 {
public static void main(String[] args) throws Exception {
//创建工作簿 HSSFWorkbook -- 2003
Workbook wb = new XSSFWorkbook(); //2007版本
//创建表单sheet
Sheet sheet = wb.createSheet("test");
//创建行对象 参数:索引(从0开始)
Row row = sheet.createRow(2);
//创建单元格对象 参数:索引(从0开始)
Cell cell = row.createCell(2);
//向单元格中写入内容
cell.setCellValue("你好中国");
//文件流
FileOutputStream pis = new FileOutputStream("E:/test1.xlsx");
//写入文件
wb.write(pis);
pis.close();
}
}
3、设置格式
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
/**
* 单元格样式处理
*/
public class PoiTest03 {
public static void main(String[] args) throws Exception {
//创建工作簿 HSSFWorkbook -- 2003
Workbook wb = new XSSFWorkbook(); //2007版本
//创建表单sheet
Sheet sheet = wb.createSheet("test");
//创建行对象 参数:索引(从0开始)
Row row = sheet