前言:工作时总会用到一个Excel工具类来完成对EXCEL的导入和导出,傻瓜式的强大工具类让我潦草地使用API调用,但实际上POI对Excel是如何操作的并不明白,换个项目或者架构就不知道如何用POI读取EXCEL了,又或者复杂的EXCEL表样式不会导出,因此决定学习记录一下。
目录
POI是什么?
使用前提
POI包结构
从Excel文件读取数据
从Excel文件写入数据
正式读写Excel中数据
读取Excel文档(待更新)
POI是什么?
Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。
使用前提
引入POI依赖,其中POI-OOXML是POI的升级版本,提供了XSSF对象,而POI提供操作EXCEL的对象是HSSF。
(因为网上教程有只导入POI依赖的,然后发现不提供XSSFworkbook的对象,所以看了看区别)
HSSF:Excel97-2003版本,扩展名为.xls。一个sheet最大行数65536,最大列数256。
XSSF:Excel2007版本开始,扩展名为.xlsx。一个sheet最大行数1048576,最大列数16384。
POI包结构
HSSF提供读写Microsoft Excel XLS格式档案的功能。
XSSF提供读写Microsoft Excel OOXML XLSX格式档案的功能。
从Excel文件读取数据 POI API documentation POI API文档 可参阅
Busy Developers' Guide to HSSF and XSSF Features 快速指南
POI API documentation POI API文档 可参阅
Busy Developers' Guide to HSSF and XSSF Features 快速指南
Poi是如何操作Excel文件的?
Poi封装了XSSFworkbook工作簿对象,也就是如图所示整个excel文档,XSSFSheet工作表对象,也就是下方sheet,一个Excel文档由一个个sheet组成。每一行数据则是Row对象,每个单元格的对象则是Cell对象。
从Excel文档中读取数据的步骤:
创建工作簿获取工作表遍历工作表获得行对象遍历行对象获取单元格对象获得单元格中的值我在本地创建一个简单的excel文档,试着用代码读取,不过用代码读取的时候需要关闭文档,否则会抛出异常:
java.io.FileNotFoundException: C:UsersAdministratordocumentstest2.xlsx (另一个程序正在使用此文件,进程无法访问。)
public class readDemo { public static void main(String[] args) { // 创建工作簿对象 XSSFWorkbook xssfWorkbook = null; try { xssfWorkbook = new XSSFWorkbook("C:\Users\Administrator\documents\test2.xlsx"); // 获取工作表 getSheet 指定sheet名字获取 // XSSFSheet sheet = xssfWorkbook.getSheet("sheet1"); // 获取工作表 getSheetAt 从第一个sheet获取,一般用这个 XSSFSheet sheet = xssfWorkbook.getSheetAt(0); // 获取行 for (Row cells : sheet) { // 获取单元格 for (Cell cell : cells) { // 获取单元格内容 假设此时单元格内容都是文本格式,用getStringCellValue获取 String value = cell.getStringCellValue(); System.out.println(value); } } xssfWorkbook.close(); } catch (IOException e) { e.printStackTrace(); } }}
简单读取EXCEL文件就完成了:
从Excel文件写入数据 创建工作簿创建工作表创建行为单元格赋值通过输出流将对象输出到磁盘
通过Poi对象对Excel写入的例子,我们就能明白,对数据进行EXCEL导出,无非就是创建XSSFWorkbook对象,通过XSSFWorkbook对象创建sheet(),再通过sheet创建row(行),通过row创建cell(单元格)的过程。
public class writeDemo { public static void main(String[] args) { // 创建工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作表 XSSFSheet sheet = workbook.createSheet(); // 创建行 第一行 XSSFRow row = sheet.createRow(0); // 创建单元格 row.createCell(0).setCellValue("puppyCoding"); row.createCell(1).setCellValue("studying"); row.createCell(2).setCellValue("how to use poi"); // 创建行 第二行 XSSFRow row2 = sheet.createRow(1); row2.createCell(0).setCellValue("puppyCoding"); row2.createCell(1).setCellValue("studying"); row2.createCell(2).setCellValue("how to use poi"); try { // 输出流 FileOutputStream fileOutputStream = new FileOutputStream("C:\Users\Administrator\documents\writeDemo1.xlsx"); workbook.write(fileOutputStream); fileOutputStream.flush(); // 释放资源 fileOutputStream.close(); workbook.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
正式读写Excel中数据
Excel文档如图所示: