easyPoi⼆级表头,⾃定义合并⾏列⽅法param name
前⾔:
最近在做导出Excel相关的内容,就想到了easyPoi,因为它是采⽤注解的⽅式进⾏开发,我个⼈觉得⾮常好⽤,直接上代码。
下⾯是easyPoi⼯具类
import cn.l.ExcelExportUtil;
import cn.l.ExcelImportUtil;
import cn.l.entity.ExportParams;
import cn.l.entity.ImportParams;
import cn.us.ExcelType;
import org.apachemons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.URLEncoder;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
/**
* @Description:
*/
public class EasyPoiUtil {
/**
* 功能描述:复杂导出Excel,包括⽂件名以及表名。创建表头
*
* @param list 导出的实体类
* @param title 表头名称
* @param sheetName sheet表名
* @param pojoClass 映射的实体类
* @param isCreateHeader 是否创建表头
* @param fileName
* @param response
* @return
*/
public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResp onse response){
ExportParams exportParams =new ExportParams(title, sheetName);
exportParams.setCreateHeadRows(isCreateHeader);
defaultExport(list, pojoClass, fileName, response, exportParams);
}
/**
* 功能描述:复杂导出Excel,包括⽂件名以及表名,不创建表头
*
* @param list 导出的实体类
* @param title 表头名称
* @param sheetName sheet表名
* @param pojoClass 映射的实体类
* @param fileName
* @param response
* @return
*/
public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response){ defaultExport(list, pojoClass, fileName, response,new ExportParams(title, sheetName));
}
/**
* 功能描述:Map 集合导出
* 功能描述:Map 集合导出
*
* @param list 实体集合
* @param fileName 导出的⽂件名称
* @param response
* @return
*/
public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response){
defaultExport(list, fileName, response);
}
/**
* 功能描述:默认导出⽅法
*
* @param list 导出的实体集合
* @param fileName 导出的⽂件名
* @param pojoClass pojo实体
* @param exportParams ExportParams封装实体
* @param response
* @return
*/
private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams){        Workbook workbook = portExcel(exportParams, pojoClass, list);
/*Sheet sheet = SheetAt(0);//取此Excel⽂件的第⼀个Sheet
//四个参数依次是:起始⾏,终⽌⾏,起始列,终⽌列,index是从0开始
CellRangeAddress craOne = new CellRangeAddress(6, 7, 2, 3);
sheet.addMergedRegion(craOne); */
if(workbook !=null){
downLoadExcel(fileName, response, workbook);
}
}
/**
* 功能描述:Excel导出
*
* @param fileName ⽂件名称
* @param response
* @param workbook Excel对象
* @return
*/
private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook){
try{
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type","application/vnd.ms-excel");
response.setHeader("Content-Disposition","attachment;filename="+de(fileName,"UTF-8"));
workbook.OutputStream());
}catch(IOException e){
throw new  RuntimeException(e);
}
}
/**
* 功能描述:默认导出⽅法
*
* @param list 导出的实体集合
* @param fileName 导出的⽂件名
* @param response
* @return
*/
private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response){
Workbook workbook = portExcel(list, ExcelType.HSSF);
if(workbook !=null);
downLoadExcel(fileName, response, workbook);
}
/**
* 功能描述:根据⽂件路径来导⼊Excel
*
* @param filePath ⽂件路径
* @param titleRows 表标题的⾏数
* @param headerRows 表头⾏数
* @param headerRows 表头⾏数
* @param pojoClass Excel实体类
* @return
*/
public static<T> List<T>importExcel(String filePath, Integer titleRows, Integer headerRows, Class<T> pojoClass){ //判断⽂件是否存在
if(StringUtils.isBlank(filePath)){
return null;
}
ImportParams params =new ImportParams();
params.setTitleRows(titleRows);
params.setHeadRows(headerRows);
List<T> list =null;
try{
list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);
}catch(NoSuchElementException e){
throw new RuntimeException("模板不能为空");
}catch(Exception e){
e.printStackTrace();
}
return list;
}
/**
* 功能描述:根据接收的Excel⽂件来导⼊Excel,并封装成实体类
*
* @param file 上传的⽂件
* @param titleRows 表标题的⾏数
* @param headerRows 表头⾏数
* @param pojoClass Excel实体类
* @return
*/
public static<T> List<T>importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){ if(file ==null){
return null;
}
ImportParams params =new ImportParams();
params.setTitleRows(titleRows);
params.setHeadRows(headerRows);
List<T> list =null;
try{
list = ExcelImportUtil.InputStream(), pojoClass, params);
}catch(NoSuchElementException e){
throw new RuntimeException("excel⽂件不能为空");
}catch(Exception e){
throw new Message());
}
return list;
}
}
⼆级表头实现⽅法
实体类,主要是这⾥添加了groupName = "学⽣信息",这个⽅法,产⽣了⼆级表头,具体介绍请看官⽅⽂档doc.io/#text_217673或者opensource.afterturn/doc/easypoi.html#302博客
import cn.l.annotation.Excel;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
public class Test implements Serializable {
@Setter
@Getter
@Excel(name ="姓名", groupName ="学⽣信息", height =11, width =15, orderNum ="1")
protected String name;
@Setter
@Getter
@Excel(name ="性别",groupName ="学⽣信息", height =11, width =15, orderNum ="2")
protected String sex;
@Setter
@Getter
@Excel(name ="学科",height =11, width =15, orderNum ="3")
protected String subject;
}
接⼝代码
@ApiOperation(value ="导出学⽣信息数据",notes ="导出学⽣信息数据")
@RequestMapping("/export_excel1")
@ApiImplicitParams({
@ApiImplicitParam(paramType ="query",name ="access_token",value ="access_token",required =true,dataType = "string"),
})
public void exportExcel1(HttpServletRequest request, HttpServletResponse response){
Test test1 =new Test();
test1.setName("张三");
test1.setSex("男");
test1.setSubject("语⽂");
Test test2 =new Test();
test2.setName("李⼩");
test2.setSex("⼥");
test2.setSubject("数学");
//根据条件查询数据库数据list
List<Test> testList =new ArrayList<>();
testList.add(test1);
testList.add(test2);
//设置表名,引脚名,⽂件格式,及写⼊list数据到excel中
}
前端代码,前端使⽤的是vue+element,封装了下axios,这⾥就不详细描述了,前端就是个请求,⽤ajax也是可以的1. html部分:
<el-button type="primary"size="small"@click="exportExcel1">导出1</el-button>
2. javascript部分:
exportExcel1(){
this.$http.post(this.$initUrl.upms_url+'/barber_order/export_excel1',{},{responseType:'arraybuffer'}).then((res)=>{ let fileName ='学⽣信息表.xls'
let blob =new Blob([res.data],{ type:'application/x-xls'})
if(window.navigator.msSaveOrOpenBlob){
navigator.msSaveBlob(blob, fileName);
}else{
var link = ateElement('a');
link.href = ateObjectURL(blob);
link.download = fileName;
link.click();
vokeObjectURL(link.href);
}
})
},
结果
⾃定义合并列⽅法
在easyPoi⼯具类中将下⾯代码注释的地⽅解开,获取第⼀个sheet开发⾃定义表格
/*Sheet sheet = SheetAt(0);//取此Excel⽂件的第⼀个Sheet
//四个参数依次是:起始⾏,终⽌⾏,起始列,终⽌列,index是从0开始
CellRangeAddress craOne = new CellRangeAddress(6, 7, 2, 3);
sheet.addMergedRegion(craOne); */
先写道这⾥,关于easyPoi三级表头,后续整理,如有疑问欢迎交流。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。