使用说明
Java针对MS Office的操作的库屈指可数,比较有名的就是Apache的POI库。一些有名的开源工具如:hutool,也对POI进行了二次封装。我基于自己做项目时的一些需求,针对POI进行了二次封装,并进行了一系列改进,使Java操作Excel、Word等文件变得更加简单。本框架相比于hutool等更“轻”,没有十分复杂的设计模式、接口等,上手更加容易。
[toc]
环境&依赖
jdk1.8
poi3.17
idea中直接导入maven项目即可完成初始构建。
表格处理
源码实现主要在com.jzy.office.excel下
Demo示例
在com.jzy.demo.excel包下有一些示例程序。
SimpleReadExcelDemo:一个简单的读excel示例。修改相应的输入文件路径信息后即可运行,下同...
public class SimpleReadExcelDemo {
public static void main(String[] args) throws IOException, InvalidFileTypeException {
//改成你实际的文件路径
String filePath = "E:\\Engineering\\java\\idea\\excel-processing\\example\\test1.xlsx";
//通过文件绝对路径构造excel对象
DefaultExcel excel = new DefaultExcel(filePath);
...
}
}
SimpleWriteExcelDemo:一个简单的写excel示例。
ReadSeatTableDemo:读取座位表信息示例。
WriteSeatTableDemo:修改座位表信息示例。给定一个教室,一组学生姓名列表,要求在座位表模板的基础上只输出该教室的sheet并将列表中的学生按座位顺序依次填充。
.....
DefaultExcel——默认的excel处理类
DefaultExcel是处理excel默认类,支持解析.xlsx、.xls、.et文件于一体,直接使用DefaultExcel或者继承DefaultExcel都可以方便的读写excel。它又继承自类CommonExcel,该类是核心,继承自抽象类AbstractExcel,实现了大量对poi处理excel二次封装后的方法;ExcelValidity接口用于检验表格的合法性;Resettable接口用于体现表格各类参数可重置的特性。
构造DefaultExcel对象
要处理excel前我们首先要根据输入excel文件构造处理对象。一个最基础的方法就是使用DefaultExcel类。
简单地,你可以直接由文件绝对路径构造DefaultExcel对象。
String filePath="E:\\test1.xlsx";
//通过文件绝对路径构造excel对象
DefaultExcel excel=new DefaultExcel(filePath);
你也可以传入InputStream流对象,并指定excel的版本以构造DefaultExcel对象。
String filePath="E:\\\test1.xlsx";
//通过InputStream流对象,并指定excel的版本构造excel对象
DefaultExcel excel=new DefaultExcel(new FileInputStream(new File(filePath)), ExcelVersionEnum.VERSION_2007);
当然,如果你仅仅想创建一个新的excel,而不是读取已有的文件,你可以直接如下构造:
//创建一个新的excel2007文件
DefaultExcel excel2007 =new DefaultExcel(ExcelVersionEnum.VERSION_2007);
//创建一个新的excel2003文件
DefaultExcel excel2003 =new DefaultExcel(ExcelVersionEnum.VERSION_2003);
构造excel表格的版本通过枚举ExcelVersionEnum决定。
进行读操作
完成excel对象的构造后,就可以直接调用其已实现的方法来读取表格信息。
获取当前表格的sheet数量
int sheetCount = excel.getSheetCount();
获取第n张sheet的总行数,通过传入sheet索引数值n-1,下同。如第一张sheet索引值为0,类比数组。
int sheetIndex=0; // 第一张sheet
int rowCount = excel.getRowCount(sheetIndex);
获取指定sheet的名称。
String sheetName = excel.getSheetName(sheetIndex);
根据sheet名称获取该名称对应sheet的索引。
int targetSheetIndex = excel.getSheetIndex(sheetName);
获取指定sheet指定行的所有值。
int rowIndex = 0; //第1行
List rowValue = excel.readRow(sheetIndex, rowIndex);
获取指定sheet指定列的所有值(从指定行开始到最后)
int columnIndex = 0; //第1列
int startRow = 1; //第2行开始
List columnValue = excel.readColumn(sheetIndex, startRow