前言
在开发过程中,很多时候都会遇到导入Excel表的功能,比如批量导入某些数据,或者将某些数据导出,这时候就需要对Excel进行操作,从而实现导入导出功能。今天就学习一下Java操作Excel的技术:POI
一、POI
POI是Apache基金会用java编写的免费开源的跨平台的Java API,POI对Office文档有读和写的功能,但是我们一般用来操作Excel。所以本文仅提供对POI对Excel操作的方式。
1.1 使用简介
- 导入依赖:
<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>
- 主要类构成
- WordkBook:接口,后续操作都在其上进行, 相当于Excel工作簿,有下边三个子接口
- XSSFWorkbook:2007版本(包含2007)以后的扩展名为.xlsx使用该类
- HSSFWorkbook:2003版本(包含2003)以前的扩展名为.xls使用该类
- SXSSFWorkbook:07的优化版本,相当于为其添加了缓存功能,可以对插入大批量的数据进行优化。
1.2 写操作
- 写操作之03版本
@Test
public void testDemo1() throws Exception{
//创建Workbook工作簿
Workbook w = new HSSFWorkbook();
//创建Sheet
Sheet sheet = w.createSheet("Excel统计表");
//创建行
Row row = sheet.createRow(0);
//创建列
Cell cell = row.createCell(0);
//设置改行该列的值
cell.setCellValue("统计个数");
cell = row.createCell(1);
cell.setCellValue(666);
row = sheet.createRow(1);
cell = row.createCell(0);
cell.setCellValue("生成日期");
cell = row.createCell(1);
String date = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
cell.setCellValue(date);
//写入到文件
FileOutputStream fo = new FileOutputStream(PATH + "测试表.xls");
w.write(fo);
fo.close();
}
- 写操作之07版本
@Test
public void testDemo1() throws Exception{
//创建Workbook工作簿
Workbook w = new XSSFWorkbook();
//创建Sheet
Sheet sheet = w.createSheet("Excel统计表");
//创建行
Row row = sheet.createRow(0);
//创建列
Cell cell = row.createCell(0);
//设置改行该列的值
cell.setCellValue("统计个数");
cell = row.createCell(1);
cell.setCellValue(666);
row = sheet.createRow(1);
cell = row.createCell(0);
cell.setCellValue("生成日期");
cell = row.createCell(1);
String date = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
cell.setCellValue(date);
//写入到文件
FileOutputStream fo = new FileOutputStream(PATH + "测试表.xls");
w.write(fo);
fo.close();
}
- 导出的数据如下图
- 写操作之优化版本
如果在写入07版本的时候,有大量的数据写入,就会有可能出现内存溢出异常,且写入的时间会变得很慢,所以引入了该优化类。
@Test
public void testDemo3() throws Exception{
long begin = System.currentTimeMillis();
Workbook w = new SXSSFWorkbook();