Apache poi操作Excel简单入门

1. 简介

什么是Apache POI?

这里借用百度百科的解释:pache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。

Apache POI有许多结构(即类)来帮我我们操作Microsoft Office中不同格式的文件,具体如下图:
在这里插入图片描述

Excek版本的区别 !!!

Excel分为以下两个版本:
HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。


区别:
HSSF:最多只能处理65536行数据,超过会抛异常;过程中写入缓存,不操作磁盘;最后一次性写入磁盘,速度快。
XSSF:可以写入大量数据,写数据时速度非常慢,非常耗内存,也会发生内存溢出,如写100万条数据。


后续代码默认以XSSF作为栗子。


2. Excel相关对象分析

在Java中我们知道,使用了万物皆对象的思想;那么将Excel揉进Java代码中也应当如此,POI给我们提供了许多Excel相关的Java对象,下面我们来一一介绍。

2.1 工作簿

工作簿即一个Excel表格,如下图,我们在文件夹中见到的一个Excel文件,即一个Wrokbook对象。
在这里插入图片描述

接口:org.apache.poi.ss.usermodel.Workbook
实现类:Workbook接口有3个实现类,分别是HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook

  • HSSFWorkbook:操作Excel03版本的Excel
  • XSSFWorkbook:操作Excel07版本的Excel
  • SXSSFWorkbook:[S:SUPER]可以加快速度的处理07版本的Excel

创建Workbook对象
Workbook workbook = new XSSFWorkbook();

常用方法

方法备注
createSheet()创建一个sheet页,有多个重载方法,这里不一一介绍。
getSheet(String sheetName);通过名称获取Sheet对象
getSheetAt(int index);通过索引获取Sheet对象
getNumberOfSheets();获取Sheet的个数
createCellStyle();创建单元格样式
setActiveSheet(int index);设置默认选中的工作表
write();写,多个重载方法,这里不一一介绍

2.2 工作表 Sheet

工作表即Excel文件中的Sheet页,如下图:我们打开一个Excel表格后,可以在Excel下方看见Sheet页,每一个Sheet页都代表了一个Sheet对象。
在这里插入图片描述

接口:org.apache.poi.ss.usermodel.Sheet
实现类:略

创建一个Sheet对象
相信大家对Excel的操作也不陌生,Sheet一定是依赖于Workbook存在的。因此我们创建Sheet对象的时候首先需要一个Workbook对象

// 1. 创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 2. 创建sheet页
XSSFSheet sheet = workbook.createSheet("第一个sheet页");

常用方法

方法备注
createRow(int rownum);创建新行,需要指定行号,行号从0开始。
getRow(int index);根据索引获取指定的行
int addMergedRegion(CellRangeAddress region);合并单元格;CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol); 单元格范围, 用于合并单元格,需要指定要合并的首行、最后一行、首列、最后一列。
getLastRowNum();获取最后的行的索引,没有行或者只有一行的时候返回0
autoSizeColumn(int column);自动调整列的宽度来适应内容
setColumnWidth(int columnIndex, int width);设置某一列的宽度,width=字符个数 * 256,例如20个字符的宽度就是20 * 256

2.3 行 Row

行”顾名思义,即为Sheet页中的一行。
在这里插入图片描述
同理,行也是依赖于Sheet存在的,因此创建一个Row对象时,首先需要创建一个Sheet对象。

// 1. 创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 2. 创建sheet页
XSSFSheet sheet = workbook.createSheet("第一个sheet页");
// 3. 创建行对象
XSSFRow row = sheet.createRow(0);

常用方法

方法备注
createCell(int column);创建新的单元格 。
setCell(shot index);根据索引设置Cell
getCell(shot index);根据索引获取Cell
getCell(CellReference.convertColStringToIndex(“A”));根据列名英文字母获取。
setRowStyle(HSSFCellStyle style);设置行样式
getLastCellNum();获取最后的单元格号,如果单元格有第一个开始算,lastCellNum就是列的个数
setHeightInPoints(float height);设置行的高度

2.4 单元格 Cell

“单元格”顾名思义就是Excel中的一个单元格。
如下图所示,“第1行, 第A列” 就是一个单元格。
在这里插入图片描述
创建Cell对象:

// 1. 创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 2. 创建sheet页
XSSFSheet sheet = workbook.createSheet("第一个sheet页");
// 3. 创建行对象
XSSFRow row = sheet.createRow(0);
// 4. 创建单元格对象
XSSFCell cell = row.createCell(0);

当我们有了Cell对象之后,就可以往这个单元格中填充数据了

cell.setCellValue("第一个数据");

常用方法

方法备注
setCellValue(String value);设置单元格的值 。
setCellType();设置单元格类型,如 字符串、数字、布尔等
setCellStyle();设置单元格样式
getStringCellValue();获取单元格中的字符串值
setCellStyle(HSSFCellStyle style);设置单元格样式,例如字体、加粗、格式化
setCellFormula(String formula);设置计算公式,计算的结果作为单元格的值,也提供了异常常用的函数,如求和"sum(A1,C1)"、日期函数、字符串相关函数、CountIf和SumIf函数、随机数函数等

2.5 单元格样式CellStyle

常用方法

方法备注
setFont(Font font);为单元格设置字体样式
setAlignment(HorizontalAlignment align);设置水平对齐方式
setVerticalAlignment(VerticalAlignment align);设置垂直对齐方式
setFillPattern(FillPatternType fp);
setFillForegroundColor(short bg);设置前景色
setFillBackgroundColor(short bg);设置背景颜色

2.6 字体 Font

常用方法

方法备注
setColor(short color);设置字体颜色
setBold(boolean bold);设置是否粗体
setItalic(boolean italic);设置倾斜
setUnderline(byte underline);设置下划线

3. 快速开始-写Excel

第一步,导入Maven依赖

<!-- xls(03) -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.9</version>
</dependency>

<!-- xls(07) -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.9</version>
</dependency>

第二步,创建Excel对象、填充数据、导出为Excel文件

// 1. 创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 2. 创建sheet页
XSSFSheet sheet = workbook.createSheet("第一个sheet页");
// 3. 创建行对象
XSSFRow row = sheet.createRow(0);
// 4. 创建单元格对象
XSSFCell cell = row.createCell(0);
// 5. 写入数据
cell.setCellValue("第一个数据");
// 6. 导出Excel
FileOutputStream fileOutputStream = new FileOutputStream("D:\\data\\Java\\fileupload\\测试导出Excel.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();

查看导出结果:
在这里插入图片描述

4. 快速开始-读Excel

第一步,导入Maven依赖

<!-- xls(03) -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.9</version>
</dependency>

<!-- xls(07) -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.9</version>
</dependency>

第二步,准备好一个Excel:“D:\data\Java\fileupload\测试导出Excel.xlsx”
在这里插入图片描述
第三步,读取 “第1行,第A列” 的数据

@Test
public void testRead() throws Exception {
    // 1. 读取文件流
    FileInputStream fileInputStream = new FileInputStream("D:\\data\\Java\\fileupload\\测试导出Excel.xlsx");
    // 2. 创建workbook
    Workbook workbook = new XSSFWorkbook(fileInputStream);
    // 3. 获取sheet
    Sheet sheet = workbook.getSheetAt(0);
    // 4. 获取row
    Row row = sheet.getRow(0);
    // 5. 获取cell
    Cell cell = row.getCell(0);
    // 6. 获取数据
    String stringCellValue = cell.getStringCellValue();
    System.out.println(stringCellValue);
    // 7. 关闭流
    fileInputStream.close();
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值