JavaWEB--POI之EXCEL操作、优化、封装详解系列(四)--PoiExportUtil架构设计篇与功能说明
来源:互联网 发布:一家人颜值都高 知乎 编辑:程序博客网 时间:2024/06/06 06:44
前篇我们讲完了我们这个工具库的入门篇,其实那个是博主抽象的基准点。PoiExportUtil这个接口库就是依赖于前篇两部分抽象的。那么现在我们来讲下这个工具的架构以及功能说明吧。
文章结构:(1)PoiExportUtil架构说明;(2)PoiExportUtil功能说明;
一、PoiExportUtil架构说明:
(一)一张图秒懂PoiExportUtil的架构:
(二)PoiExportUtil工具细节说明:
(1)PoiInterface 接口:
主要职责:定义工具提供的所有接口(大家可直接调用);
对于此接口需要理解的参数:
/* * 一些通用的方法:在此明确所有参数 * excelVersion excel的版本 * title 表格标题名 * headersName 表格属性列名数组(即:每列标题) * headersId 表格属性列名对应的字段(即:每列标题的英文标识--为了去list去拿)---你需要导出的字段名(所有接口都是支持headersId乱序的设计) * dtoList 想要导出的数据list(即:数据库查出的数据集合) 有两种风格:JavaBean风格 与 哈希数据结构风格 * out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 * * wb Workbook工作簿对象 * sheet 表格对象 * * styleUtil 是我抽象出来的样式层,大家可继承ExcelStyleBase类实现自己的超高自定义样式 * * pageNum 分页码--针对大数据量的分页功能 * pageSize 每页的数量--针对大数据量的分页功能 */
接口的实现代码:
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;/** * Created by 符柱成 on 2017/8/24. */public interface PoiInterface<T> { /* (普通JavaBean结构) */ //导出默认样式EXCEL文件(根据headersId来导出对应字段,)--根据headersId筛选要导出的字段 int exportBeanExcel(int excelVersion,String title, List<String> headersName, List<String> headersId, List<T> dtoList, OutputStream out); //导出自定义样式Excel文件--根据headersId筛选要导出的字段 int exportStyleBeanExcel(int excelVersion,String title, List<String> headersName, List<String> headersId, List<T> dtoList, OutputStream out,StyleInterface styleUtil); //默认导出dtolist的所有数据--默认导出dtolist的所有数据 int exportStyleBeanExcel(int excelVersion,String title, List<String> headersName, List<T> dtoList, OutputStream out,StyleInterface styleUtil); //分页导出自定义样式Excel文件----拿到工作簿 Workbook getPageExcelBook(int excelVersion); //分页导出自定义样式Excel文件----拿到表格 Sheet getPageExcelSheet(Workbook wb,String bookTitle); //分页导出自定义样式Excel文件----标题栏 Sheet exportPageTitleExcel(Workbook wb,Sheet sheet,List<String> headersName,StyleInterface styleUtil); //分页导出Bean结构自定义样式Excel文件----数据体 Sheet exportPageContentBeanExcel(Workbook wb,Sheet sheet,List<String> headersId,List<T> dtoList,StyleInterface styleUtil,int pageNum,int pageSize); //分页导出Bean结构自定义样式Excel文件----数据体--没有标题栏字段匹配--默认导出dtolist的所有数据 Sheet exportPageContentBeanExcel(Workbook wb,Sheet sheet,List<T> dtoList,StyleInterface styleUtil,int pageNum,int pageSize); //分页导出Map结构自定义样式Excel文件----数据体--根据headersId筛选要导出的字段 Sheet exportPageContentMapExcel(Workbook wb,Sheet sheet,List<String> headersId,List<Map<String, Object>> dtoList,StyleInterface styleUtil,int pageNum,int pageSize); //分页导出Map结构自定义样式Excel文件----数据体--没有标题栏字段匹配,数据体dtoList需要使用treemap。--默认导出dtolist的所有数据 Sheet exportPageContentMapExcel(Workbook wb,Sheet sheet,List<Map<String, Object>> dtoList,StyleInterface styleUtil,int pageNum,int pageSize); /* List<Map<String, Object>>结构 */ //导出默认样式的Map结构Excel--根据headersId筛选要导出的字段 int exportMapExcel(int excelVersion,String title, List<String> headersName, List<String> headersId, List<Map<String, Object>> dtoList, OutputStream out) throws Exception ; //导出自定义样式的Map结构Excel--根据headersId筛选要导出的字段 int exportStyleMapExcel(int excelVersion,String title, List<String> headersName, List<String> headersId, List<Map<String, Object>> dtoList, OutputStream out,StyleInterface styleUtil) throws Exception ; //导出自定义样式的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 ;}
(2)StyleInterface接口:
主要职责:抽象出样式层;
此接口额外说明:当使用CellStyle setHeaderStyle(Workbook wb, Sheet sheet);此接口方法,这意味着你要完全自定义所有样式,其余方法除CellStyle setDataStyle(Workbook wb);均会失效。使用时请特别注意,这个主要是针对所有行列以及标题栏做的完全自定义。
接口代码:
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); /* 当你使用以下这个方法的sheet对象时,请不要使用上面的setHeaderStyle(Workbook wb)、setRowHigh()、setColumnWidth()、setSpecifiedHighAndWidth(Sheet sheet)方法。因为下面是完全自定义,会完全覆盖上面方法的。 同时请小心使用sheet对象,此处调用及其容易破坏封装。 */ //高度自定义标题栏样式--可以针对单列单行 宽高 CellStyle setHeaderStyle(Workbook wb, Sheet sheet); //获取行高 short getRowHigh(); //获取列宽 short getColumnWidth();}
(3)PoiExcelBase抽象类:
主要职责:实现两个产品工具的公有方法,公有属性,实现部分PoiInterface接口方法。
类代码:(代码过多就不一一列举了,说明关键属性)
/* EXCEL版本支持:03与07 0 EXCEL_VERSION_03 1 EXCEL_VERSION_07 (普通JavaBean) -1 导出EXCEL文件 (Map结构) -5 导出默认样式EXCEL文件 */ 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结构:
(1)导出默认样式EXCEL文件–根据headersId筛选要导出的字段。
int exportBeanExcel(int excelVersion,String title, List<String> headersName, List<String> headersId, List<T> dtoList, OutputStream out);
(2)导出自定义样式Excel文件–根据headersId筛选要导出的字段:
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结构:
(1)导出默认样式的Map结构Excel–根据headersId筛选要导出的字段:
int exportMapExcel(int excelVersion,String title, List<String> headersName, List<String> headersId, List<Map<String, Object>> dtoList, OutputStream out) throws Exception ;
(2)导出自定义样式的Map结构Excel–根据headersId筛选要导出的字段:
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 ;
(三)另外本博主还封装了应对大量数据导出的分页方案。将在后面详细讲述。
(四)导出的数据顺序说明:
(1)有headersId限定的,数据顺序以headersId为准;
(2)没有headersId限定的,对于JavaBean结构的数据顺序是:他所有属性的顺序
(3)没有headersId限定的,对于List-Map结构的数据顺序是:数据加入到dtoList时的顺序,也就是加入到Map容器的时候的顺序。(为了有序,须使用TreeMap规范数据顺序)
POI辅助库PoiExportUtil源码下载:JavaWEB–POI之EXCEL操作、优化、封装详解系列(四)–PoiExportUtil架构设计篇与功能说明
好了,JavaWEB–POI之EXCEL操作、优化、封装详解系列(四)–PoiExportUtil架构设计篇与功能说明讲完了,这是自己设计的第一个Java工具库,并且抽象作为开源工具了,在这里写出来记录,这是积累的必经一步,我会继续出这个系列文章,分享经验给大家。欢迎在下面指出错误,共同学习!!你的点赞是对我最好的支持!!
更多内容,可以访问JackFrost的博客
阅读全文
0 0
- JavaWEB--POI之EXCEL操作、优化、封装详解系列(四)--PoiExportUtil架构设计篇与功能说明
- JavaWEB--POI之EXCEL操作、优化、封装详解系列(三)--万能POI之EXCEL导出工具--PoiExportUtil入门篇
- JavaWEB--POI之EXCEL操作、优化、封装详解系列(五)--PoiExportUtil使用文档(1)
- JavaWEB--POI之EXCEL操作、优化、封装详解系列(六)--PoiExportUtil使用文档(2)分页
- JavaWEB--POI之EXCEL操作、优化、封装详解系列(一)--概述与原理
- JavaWEB--POI之EXCEL操作、优化、封装详解系列(二)--导入导出helloworld(对比JXL库)
- Java操作Excel之Poi(四)
- POI操作EXCEL--封装类
- poi操作excel-查询封装
- javaWeb导出POI 操作excel文件
- Hadoop系列-HDFS设计思想与架构(四)
- POI实战-java开发excel详解之常用操作-单元格合并与数据读取
- Unity3D架构系列之- FSM有限状态机设计(四)
- 一脸懵逼学习Java操作Excel之POI(Apache POI)
- 新手封装的POI操作Excel
- 封装poi操作Excel工具类
- 基于POI的简单EXCEL操作封装
- POI实战-java开发excel详解之常用操作-注释
- 【PCL】将ply文件转换为pcd文件
- 【MySQL】——索引
- 关于ContentProvider的使用
- json格式错误 json引号引起的问题
- 20170827桌牌项目记录
- JavaWEB--POI之EXCEL操作、优化、封装详解系列(四)--PoiExportUtil架构设计篇与功能说明
- BZOJ 3237 连通图 (cdq分治 并查集)
- 二分图匹配
- hibernate 一对多建表实例详解 附上各个注释的含义
- Ubuntu16.04中出现错误, Epson Driver Install "Failed to satisfy all dependencies"的处理方式.
- hackbar黑客插件
- 帧中继介绍
- 聊天----滑动窗口
- React Native之生命周期