前篇我们讲完了我们这个工具库的架构设计篇,那个是我工具设计的思想点。PoiExportUtil这个接口库就是基于前篇来进行封装的。那么现在我们来讲下这个工具的使用吧。
文章结构:(1)库参数说明;(2)如何使用自定义样式接口?(3)针对普通JavaBean结构的接口使用;(4)针对List-Map结构的接口使用;
一、库参数说明:
(一)博主提供的PoiInterface接口的总参数:
/*
* 一些通用的方法:在此明确所有参数
* int excelVersion excel的版本
* String title 表格标题名
* List<String> headersName 表格属性列名数组(即:每列标题)
* List<String> headersId 表格属性列名对应的字段(即:每列标题的英文标识--为了去list去拿)---你需要导出的字段名(所有接口都是支持headersId乱序的设计)
* List dtoList 或者 List<Map<String, Object>> dtoList 想要导出的数据list(即:数据库查出的数据集合) 有两种风格:JavaBean风格 与 哈希数据结构风格
* OutputStream out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
*
* Workbook wb Workbook工作簿对象
* Sheet sheet 表格对象
*
* StyleInterface styleUtil 是我抽象出来的样式层,大家可继承ExcelStyleBase类实现自己的超高自定义样式
*
* int pageNum 分页码--针对大数据量的分页功能
* int pageSize 每页的数量--针对大数据量的分页功能
*/
(1)excelVersion :选择excel版本
PoiExcelBase.EXCEL_VERSION_07
PoiExcelBase.EXCEL_VERSION_03
(2)title :表格名
这个需要我们针对自己想要的标题手动设置。
(5)dtoList :就是我们查询出来想导出的数据啦
(6) wb :就是工作簿对象,在分页功能会使用到
(7)sheet :就是表格对象,在分页功能会使用到
(8)styleUtil :这个是重点喔,当我们想使用自定义样式的时候,就需要使用到这个参数了。至于怎么自定义样式?下面会讲到。
(9)pageNum :分页码–在分页功能会使用到
(10)pageSize :每页的数量–在分页功能会使用到
二、如何使用自定义样式接口??
(1)继承ExcelStyleBase抽象类:
public class TestStyle extends ExcelStyleBase {
@Override
public CellStyle setHeaderStyle(Workbook wb) {
return null;
}
@Override
public CellStyle setDataStyle(Workbook wb) {
return null;
}
@Override
public void setRowHigh() {
}
@Override
public void setColumnWidth() {
}
@Override
public Map setMySpecifiedHighAndWidth() {
return null;
}
@Override
public CellStyle setHeaderStyle(Workbook wb, Sheet sheet) {
return null;
}
}
(2)一般如何配套使用?两条路线配套使用。而且在两条使用路线中,可随意使用各自方法,或者不使用。这都是支持的。
public class MyStyle extends ExcelStyleBase {
@Override
public CellStyle setHeaderStyle(Workbook wb) {
Font font = wb.createFont();
font.setFontHeightInPoints((short) 10);
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
font.setFontName("宋体");
font.setColor((short) 10);
CellStyle headerStyle = wb.createCellStyle();
headerStyle.setFillForegroundColor((short) 13);
headerStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
headerStyle.setFont(font);
headerStyle.setBorderTop(CellStyle.BORDER_THIN);
headerStyle.setBorderRight(CellStyle.BORDER_THIN);
headerStyle.setBorderLeft(CellStyle.BORDER_THIN);
headerStyle.setBorderBottom(CellStyle.BORDER_THIN);
headerStyle.setWrapText(false);
headerStyle.setAlignment(CellStyle.ALIGN_CENTER);
headerStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
return headerStyle;
}
@Override
public CellStyle setDataStyle(Workbook wb) {
Font font = wb.createFont();
font.setFontHeightInPoints((short) 10);
font.setFontName("宋体");
font.setColor((short) 32767);
CellStyle dataStyle = wb.createCellStyle();
dataStyle.setFillForegroundColor((short)70);
dataStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
dataStyle.setFont(font);
dataStyle.setBorderTop(CellStyle.BORDER_THIN);
dataStyle.setBorderRight(CellStyle.BORDER_THIN);
dataStyle.setBorderLeft(CellStyle.BORDER_THIN);
dataStyle.setBorderBottom(CellStyle.BORDER_THIN);
dataStyle.setWrapText(false);
dataStyle.setAlignment(CellStyle.ALIGN_CENTER);
dataStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
return dataStyle;
}
@Override
public void setRowHigh() {
setMyRowHigh((short) (2 * 256));
}
@Override
public void setColumnWidth() {
setMyColumnWidth((short) 30);
}
@Override
public Map setMySpecifiedHighAndWidth() {
Map map = new HashMap<>();
map.put(1,3000);
map.put(2,3000);
return map;
}
@Override
public CellStyle setHeaderStyle(Workbook wb, Sheet sheet) {
return null;
}
}
第二条路线使用:单纯使用高度自定义方式以及设置数据栏的方法CellStyle setDataStyle(Workbook wb)
public class TestStyle extends ExcelStyleBase {
@Override
public CellStyle setHeaderStyle(Workbook wb) {
return null;
}
@Override
public CellStyle setDataStyle(Workbook wb) {
Font font = wb.createFont();
font.setFontHeightInPoints((short) 10);
font.setFontName("宋体");
font.setColor((short) 32767);
CellStyle dataStyle = wb.createCellStyle();
dataStyle.setFillForegroundColor((short)70);
dataStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
dataStyle.setFont(font);
dataStyle.setBorderTop(CellStyle.BORDER_THIN);
dataStyle.setBorderRight(CellStyle.BORDER_THIN);
dataStyle.setBorderLeft(CellStyle.BORDER_THIN);
dataStyle.setBorderBottom(CellStyle.BORDER_THIN);
dataStyle.setWrapText(false);
dataStyle.setAlignment(CellStyle.ALIGN_CENTER);
dataStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
return dataStyle;
}
@Override
public void setRowHigh() {
}
@Override
public void setColumnWidth() {
}
@Override
public CellStyle setHeaderStyle(Workbook wb, Sheet sheet) {
sheet.setColumnWidth(1, 600);
Font font = wb.createFont();
font.setFontHeightInPoints((short) 10);
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
font.setFontName("宋体");
font.setColor((short) 10);
CellStyle headerStyle = wb.createCellStyle();
headerStyle.setFillForegroundColor((short) 13);
headerStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
headerStyle.setFont(font);
headerStyle.setBorderTop(CellStyle.BORDER_THIN);
headerStyle.setBorderRight(CellStyle.BORDER_THIN);
headerStyle.setBorderLeft(CellStyle.BORDER_THIN);
headerStyle.setBorderBottom(CellStyle.BORDER_THIN);
headerStyle.setWrapText(false);
headerStyle.setAlignment(CellStyle.ALIGN_CENTER);
headerStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
return headerStyle;
}
@Override
public Map setMySpecifiedHighAndWidth() {
return null;
}
}
(3)自定义样式的特别使用说明:
对于以下两个接口方法,是有固定的使用方式的
void setRowHigh();
void setColumnWidth();
固定的使用方式:而且此方法是针对每一行每一列的
@Override
public void setRowHigh() {
setMyRowHigh((short) (2 * 256));
}
@Override
public void setColumnWidth() {
setMyColumnWidth((short) 30);
}
(4)有多少样式我们可以自定义?
这只是个API的问题。本博主就不列举了,给出链接就好:POI的多种样式API
三、针对普通JavaBean结构:
int exportBeanExcel(int excelVersion,String title, List<String> headersName, List<String> headersId,
List dtoList, OutputStream out);
int exportStyleBeanExcel(int excelVersion,String title, List<String> headersName, List<String> headersId,
List dtoList, OutputStream out,StyleInterface styleUtil);
(三)默认导出dtolist的所有数据–默认导出dtolist的所有数据:
int exportStyleBeanExcel(int excelVersion,String title, List<String> headersName,
List dtoList, OutputStream out,StyleInterface styleUtil);
DEMO代码:
package com.fuzhu.test
import com.fuzhu.base.PoiExcelBase
import com.fuzhu.base.StyleInterface
import com.fuzhu.model.Student
import com.fuzhu.styleImpl.MyStyle
import com.fuzhu.styleImpl.TestStyle
import com.fuzhu.util.PoiBeanFactory
import com.fuzhu.base.PoiInterface
import java.io.FileOutputStream
import java.io.IOException
import java.util.ArrayList
import java.util.HashMap
import java.util.List
import java.util.Map
public class ExportBeanTest {
public static void main(String [] args) throws IOException {
List listName = new ArrayList<>()
listName.add("id")
listName.add("名字")
listName.add("性别")
List listId = new ArrayList<>()
listId.add("id")
listId.add("sex")
listId.add("name")
List list = new ArrayList<>()
list.add(new Student(111,"张三asdf","男"))
list.add(new Student(111,"李四asd","男"))
list.add(new Student(111,"王五bhasdcfvbhujidsaub","女"))
FileOutputStream exportXls = null
if (PoiExcelBase.EXCEL_VERSION_07==0) {
exportXls = new FileOutputStream("E://工单信息表.xls")
}else {
exportXls = new FileOutputStream("E://工单信息表.xlsx")
}
PoiInterface poiInterface = PoiBeanFactory.getInstance().getPoiUtil(PoiExcelBase.EXPORT_SIMPLE_EXCEL)
StyleInterface myStyle = new TestStyle()
//导出默认样式EXCEL文件(根据headersId来导出对应字段,)--根据headersId筛选要导出的字段
//int flag = poiInterface.exportBeanExcel(PoiExcelBase.EXCEL_VERSION_07,"测试POI导出EXCEL文档",listName,listId,list,exportXls)
//导出自定义样式Excel文件--根据headersId筛选要导出的字段
int flag = poiInterface.exportStyleBeanExcel(PoiExcelBase.EXCEL_VERSION_07,"测试POI导出EXCEL文档",listName,listId,list,exportXls,myStyle)
//默认导出dtolist的所有数据--默认导出dtolist的所有数据
// int flag = poiInterface.exportStyleBeanExcel(PoiExcelBase.EXCEL_VERSION_07,"测试POI导出EXCEL文档",listName,list,exportXls,myStyle)
System.out.println("flag : "+flag)
exportXls.close()
}
}
四、针对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 ;
(三)导出自定义样式的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 ;
demo代码:
package com.fuzhu.test
import com.fuzhu.base.PoiExcelBase
import com.fuzhu.base.PoiInterface
import com.fuzhu.base.StyleInterface
import com.fuzhu.model.Student
import com.fuzhu.styleImpl.MyStyle
import com.fuzhu.util.PoiBeanFactory
import java.io.FileOutputStream
import java.util.*
public class ExportMapTest {
public static void main(String [] args) throws Exception {
List listName = new ArrayList<>()
listName.add("id")
listName.add("名字")
listName.add("性别")
List listId = new ArrayList<>()
listId.add("id")
listId.add("sex")
listId.add("name")
List
POI辅助库PoiExportUtil源码下载:JavaWEB–POI之EXCEL操作、优化、封装详解系列(五)–PoiExportUtil使用文档(1)
好了,JavaWEB–POI之EXCEL操作、优化、封装详解系列(五)–PoiExportUtil使用文档(1)讲完了,这是自己设计的第一个Java工具库,并且抽象作为开源工具了,在这里写出来记录,这是积累的必经一步,我会继续出这个系列文章,分享经验给大家。欢迎在下面指出错误,共同学习!!你的点赞是对我最好的支持!!
更多内容,可以访问JackFrost的博客