概述
说到导出Excel文档,我们一般会想到很多放方式,比如简单的EasyPoi,采用注解的方式,直接导出,使用template模板方式,然后将数据写入模板,将数据转换成Map或是List集合写入Excel。方式很多,今天主要给大家分享下多sheet页多合并策略导出Excel文档。
一、正常导出方式
①使用ExcelWriter将策略定义好
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
.registerWriteHandler(setHorizontalCellStyleStrategy())
.registerWriteHandler(new MergeStrategy("月度总览",5,Arrays.asList(0,1,2,3,4,5)))
.excelType(ExcelTypeEnum.XLSX).build();
②创建sheet页
WriteSheet sheet1 = EasyExcel.writerSheet(0,"月度总览").build();
③在sheet页中添加列头信息
sheet1.setNeedHead(Boolean.TRUE);
sheet1.setHead(head);
④将数据以及sheet页写入工作簿
excelWriter.write(list1, sheet1);
⑤关闭流
excelWriter.write(list3, sheet3);
二、多sheet页导出
如果是多sheet页,重复“一”中的2,3,4部分,创建sheet页,添加列头信息,写入工作簿
三、不同合并策略
需要重写AbstractMergeStrategy这个类的merge方法,定义自己要merge的方式
比如,通过sheet名称区分合并策略,定义几行合并一次,这个参数是之前就有的,合并哪几列,创建一个list,即:
package com.huazhu.spm.labour.common.utils;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import java.util.List;
import lombok.AllArgsConstructor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
@AllArgsConstructor
public class MergeStrategyextends AbstractMergeStrategy {
private StringsheetName;
private int eachRow;
private ListcolumnIndexList;
/**
* merge
*
* @param sheet
* @param cell
* @param head
* @param relativeRowIndex
*/
@Override
protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
if (!sheet.getSheetName().equals(sheetName)) {
return;
}
if (relativeRowIndex ==null) {
return;
}
Integer currentColumnIndex;
if (head !=null) {
currentColumnIndex = head.getColumnIndex();
}else {
currentColumnIndex = cell.getColumnIndex();
}
if (columnIndexList.contains(currentColumnIndex) && relativeRowIndex %eachRow ==0) {
CellRangeAddress cellRangeAddress =new CellRangeAddress(cell.getRowIndex(),
cell.getRowIndex() +eachRow -1, cell.getColumnIndex(),
cell.getColumnIndex() );
sheet.addMergedRegionUnsafe(cellRangeAddress);
}
}
}
在使用的时候,注册多个策略,传入对应的值,即可实现多sheet页不同合并方式的Excel导出
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
.registerWriteHandler(setHorizontalCellStyleStrategy())
.registerWriteHandler(new MergeStrategy("月度总览",5,Arrays.asList(0,1,2,3,4,5)))
.registerWriteHandler(new MergeStrategy("出勤状态",3,Arrays.asList(0,1,2,3,4,5)))
.registerWriteHandler(new MergeStrategy("出勤记录",3,Arrays.asList(0,1,2,3,4,5)))
.excelType(ExcelTypeEnum.XLSX).build();
如有错误,请讨论,谢谢
最后
以上就是纯真外套为你收集整理的AliEasyExcel 多sheet不同合并策略实现方式的全部内容,希望文章能够帮你解决AliEasyExcel 多sheet不同合并策略实现方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复