我是靠谱客的博主 纯真外套,最近开发中收集的这篇文章主要介绍AliEasyExcel 多sheet不同合并策略实现方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        说到导出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不同合并策略实现方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部