前篇我们讲完了我们这个工具库的入门篇,其实那个是博主抽象的基准点。PoiExportUtil这个接口库就是依赖于前篇两部分抽象的。那么现在我们来讲下这个工具的架构以及功能说明吧。
文章结构:(1)PoiExportUtil架构说明;(2)PoiExportUtil功能说明;
一、PoiExportUtil架构说明:
(一)一张图秒懂PoiExportUtil的架构:
(二)PoiExportUtil工具细节说明:
(1)PoiInterface 接口:
主要职责:定义工具提供的所有接口(大家可直接调用);
对于此接口需要理解的参数:
-----
--
--
接口的实现代码:
package com.fuzhu.base;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
public interface PoiInterface<T> {
int exportBeanExcel(int excelVersion,String title, List<String> headersName, List<String> headersId,
List<T> dtoList, OutputStream out);
int exportStyleBeanExcel(int excelVersion,String title, List<String> headersName, List<String> headersId,
List<T> dtoList, OutputStream out,StyleInterface styleUtil);
int exportStyleBeanExcel(int excelVersion,String title, List<String> headersName,
List<T> dtoList, OutputStream out,StyleInterface styleUtil);
Workbook getPageExcelBook(int excelVersion);
Sheet getPageExcelSheet(Workbook wb,String bookTitle);
Sheet exportPageTitleExcel(Workbook wb,Sheet sheet,List<String> headersName,StyleInterface styleUtil);
Sheet exportPageContentBeanExcel(Workbook wb,Sheet sheet,List<String> headersId,List<T> dtoList,StyleInterface styleUtil,int pageNum,int pageSize);
Sheet exportPageContentBeanExcel(Workbook wb,Sheet sheet,List<T> dtoList,StyleInterface styleUtil,int pageNum,int pageSize);
Sheet exportPageContentMapExcel(Workbook wb,Sheet sheet,List<String> headersId,List<Map<String, Object>> dtoList,StyleInterface styleUtil,int pageNum,int pageSize);
Sheet exportPageContentMapExcel(Workbook wb,Sheet sheet,List<Map<String, Object>> dtoList,StyleInterface styleUtil,int pageNum,int pageSize);
int exportMapExcel(int excelVersion,String title, List<String> headersName, List<String> headersId,
List<Map<String, Object>> dtoList, OutputStream out) throws Exception ;
int exportStyleMapExcel(int excelVersion,String title, List<String> headersName, List<String> headersId,
List<Map<String, Object>> dtoList, OutputStream out,StyleInterface styleUtil) throws Exception ;
int exportStyleMapExcel(int excelVersion,String title, List<String> headersName,
List<Map<String, Object>> dtoList, OutputStream out,StyleInterface styleUtil) throws Exception ;
}
(2)StyleInterface接口:
主要职责:抽象出样式层;
接口代码:
package com.fuzhu.base;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
/**
* Created by 符柱成 on 2017/8/24.
*/
public interface StyleInterface {
CellStyle setHeaderStyle(Workbook wb);
CellStyle setDataStyle(Workbook wb);
void setRowHigh();
void setColumnWidth();
void setSpecifiedHighAndWidth(Sheet sheet);
CellStyle setHeaderStyle(Workbook wb, Sheet sheet);
short getRowHigh();
short getColumnWidth();
}
(3)PoiExcelBase抽象类:
主要职责:实现两个产品工具的公有方法,公有属性,实现部分PoiInterface接口方法。
类代码:(代码过多就不一一列举了,说明关键属性)
public static int EXCEL_VERSION_03 = 0;
public static int EXCEL_VERSION_07 = 1;
public static int EXPORT_SIMPLE_EXCEL = -1;
public static int EXPORT_MAP_EXCEL = -5;
(4)ExcelStyleBase抽象类:
主要职责:实现样式接口的部分方法,定义公有属性,模板模式处理一些方法以便接口更容易上手。
package com.fuzhu.base;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Created by 符柱成 on 2017/8/25.
*/
public abstract class ExcelStyleBase implements StyleInterface{
private short rowHigh = 0;
private short columnWidth = 0;
@Override
public abstract CellStyle setHeaderStyle(Workbook wb);
@Override
public abstract CellStyle setDataStyle(Workbook wb);
@Override
public abstract void setRowHigh();
@Override
public abstract void setColumnWidth();
public abstract Map<Integer,Integer> setMySpecifiedHighAndWidth();
@Override
public void setSpecifiedHighAndWidth(Sheet sheet) {
Map<Integer,Integer> map = this.setMySpecifiedHighAndWidth();
if (map!=null) {
Set<Map.Entry<Integer, Integer>> entrySet = map.entrySet();
for (Map.Entry<Integer, Integer> entry : entrySet) {
Integer key = entry.getKey();
Integer value = entry.getValue();
sheet.setColumnWidth(key, value);
}
}
}
@Override
public short getRowHigh() {
return rowHigh;
}
@Override
public short getColumnWidth() {
return columnWidth;
}
protected void setMyRowHigh(short high){
rowHigh = high;
}
protected void setMyColumnWidth(short width){
columnWidth = width;
}
}
(5)至于ExportBeanExcel以及ExportMapExcel这两个类,里面就是前篇文章的封装啦,比较复杂。有兴趣的朋友去我github看吧。
(6)而图中的MyStyle类,是大家可以继承我的ExcelStyleBase抽象类,实现自己的自定义样式类的。
二、PoiExportUtil功能说明:
下一篇将详细讲解PoiExportUtil的使用
(一)针对普通JavaBean结构:
int exportBeanExcel(int excelVersion,String title, List<String> headersName, List<String> headersId,
List<T> dtoList, OutputStream out);
int exportStyleBeanExcel(int excelVersion,String title, List<String> headersName, List<String> headersId,
List<T> dtoList, OutputStream out,StyleInterface styleUtil);
(3)默认导出dtolist的所有数据–默认导出dtolist的所有数据:
int exportStyleBeanExcel(int excelVersion,String title, List<String> headersName,
List<T> dtoList, OutputStream out,StyleInterface styleUtil);
(二)针对List-Map结构:
int exportMapExcel(int excelVersion,String title, List<String> headersName, List<String> headersId,
List<Map<String, Object>> dtoList, OutputStream out) throws Exception ;
int exportStyleMapExcel(int excelVersion,String title, List<String> headersName, List<String> headersId,
List<Map<String, Object>> dtoList, OutputStream out,StyleInterface styleUtil) throws Exception ;
(3)导出自定义样式的Map结构Excel–没有标题栏字段匹配,数据体dtoList需要使用treemap。–默认导出dtolist的所有数据:
int exportStyleMapExcel(int excelVersion,String title, List<String> headersName,
List<Map<String, Object>> dtoList, OutputStream out,StyleInterface styleUtil) throws Exception ;
(三)另外本博主还封装了应对大量数据导出的分页方案。将在后面详细讲述。
(四)导出的数据顺序说明:
好了,JavaWEB–POI之EXCEL操作、优化、封装详解系列(四)–PoiExportUtil架构设计篇与功能说明讲完了,这是自己设计的第一个Java工具库,并且抽象作为开源工具了,在这里写出来记录,这是积累的必经一步,我会继续出这个系列文章,分享经验给大家。欢迎在下面指出错误,共同学习!!你的点赞是对我最好的支持!!