小工具知识网

当前位置: 首页 > 行业知识 > EasyExcel自定义合并单元格-java

行业知识

EasyExcel自定义合并单元格-java

2026-10-26 02:19:00 来源:互联网转载

使用EasyExcel合并单元格

()

前言

在此,我想分享一些个人的经验和见解,希望能为同样追求进步的您提供一些启示和帮助。每一篇文章都是我深思熟虑的结果,欢迎您阅读、收藏并关注。在未来的日子里,我会继续分享更多的经验,与您共同探索更多未知的领域。请相信,每一次的分享都是我真挚的心意,期待与您共同成长,共创美好未来。

1、创建实体

import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;/** * @author jhb * @desc 合并单元格 实体 * @date 2024-01-23 */@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class MergeRange {    /**     * 列索引     */    private int columnIndex;    /**     * 开始行     */    private int startRow;    /**     * 结束行     */    private int endRow;}

2、编写合并策略类

package net.jhb.utils;import com.alibaba.excel.metadata.Head;import com.alibaba.excel.write.merge.AbstractMergeStrategy;import net.qihoo.mss.model.excel.MergeRange;import org.apache.poi.ss.usermodel.*;import org.apache.poi.ss.util.CellRangeAddress;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * @author jhb * @desc 合并单元格策略类 * @date 2024-1-23 */public class MergeStrategy extends AbstractMergeStrategy {    /**     * 合并数据的信息     */    private final Map mergeRangesMap;    public MergeStrategy(List mergeRanges) {        this.mergeRangesMap = new HashMap();        for (MergeRange mergeRange : mergeRanges) {            int columnIndex = mergeRange.getColumnIndex();            if (!mergeRangesMap.containsKey(columnIndex)) {                mergeRangesMap.put(columnIndex, new ArrayList());            }            mergeRangesMap.get(columnIndex).add(mergeRange);        }    }    @Override    protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {        int columnIndex = cell.getColumnIndex();        int rowIndex = cell.getRowIndex();        // 设置水平居中对齐        CellStyle cellStyle = cell.getCellStyle();        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);        cellStyle.setAlignment(HorizontalAlignment.CENTER);        cell.setCellStyle(cellStyle);        if (mergeRangesMap.containsKey(columnIndex)) {            for (MergeRange mergeRange : mergeRangesMap.get(columnIndex)) {                int startRow = mergeRange.getStartRow();                int endRow = mergeRange.getEndRow();                if (rowIndex >= startRow && rowIndex = rowIndex) {                            sheet.removeMergedRegion(sheet.getMergedRegions().indexOf(mergedRegion));                        }                    }                    // 合并单元格                    CellRangeAddress newMergedRegion = new CellRangeAddress(startRow, endRow, columnIndex, columnIndex);                    sheet.addMergedRegion(newMergedRegion);                    break; // 找到对应的合并范围后,停止继续查找                }            }        }    }}

3、编写样式的工具类

package net.jhb.utils;import com.alibaba.excel.write.metadata.style.WriteCellStyle;import org.apache.poi.ss.usermodel.HorizontalAlignment;import org.apache.poi.ss.usermodel.VerticalAlignment;/** * @author jhb * @desc 合并单元格策略类 * @date 2024-1-23 */public class CellStyleUtil {    /**     * 设置头样式     * @return     */    public static WriteCellStyle getHeadStyle() {        // 创建一个新的 WriteCellStyle 对象        WriteCellStyle style = new WriteCellStyle();        // 设置水平居中对齐        style.setHorizontalAlignment(HorizontalAlignment.CENTER);        // 设置垂直居中对齐        style.setVerticalAlignment(VerticalAlignment.CENTER);        return style;    }    /**     * 设置内容样式     * @return     */    public static WriteCellStyle getContentStyle() {        // 创建一个新的 WriteCellStyle 对象        WriteCellStyle style = new WriteCellStyle();        // 设置水平居中对齐        style.setHorizontalAlignment(HorizontalAlignment.CENTER);        // 设置垂直居中对齐        style.setVerticalAlignment(VerticalAlignment.CENTER);        return style;    }}

4、测试类

package net.jhb.utils;import com.alibaba.excel.EasyExcel;import com.alibaba.excel.annotation.ExcelProperty;import com.alibaba.excel.annotation.write.style.ColumnWidth;import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;import net.qihoo.mss.model.excel.MergeRange;import org.springframework.util.ResourceUtils;import java.io.File;import java.io.IOException;import java.io.OutputStream;import java.nio.file.Files;import java.util.ArrayList;import java.util.List;public class Main {    public static void main(String[] args) throws IOException {        File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "templates/01-HLWBLM/v3/test.xlsx");        //        OutputStream out = Files.newOutputStream(file.toPath());        // 生成一些测试数据        List mergeRanges = new ArrayList();        mergeRanges.add(new MergeRange(0, 0, 3)); // 合并第1列的第1行到第3行        mergeRanges.add(new MergeRange(0, 4, 7)); // 合并第1列的第5行到第7行        mergeRanges.add(new MergeRange(0, 8, 12)); // 合并第1列的第9行到第12行        mergeRanges.add(new MergeRange(1, 0, 3)); // 合并第2列的第0行到第4行        mergeRanges.add(new MergeRange(1, 4, 7)); // 合并第2列的第6行到第9行        // 写入Excel文件        EasyExcel.write(out)                .sheet("Sheet1")                .head(TestData.class)                .registerWriteHandler(new MergeStrategy(mergeRanges))                .registerWriteHandler(new HorizontalCellStyleStrategy(CellStyleUtil.getHeadStyle(),CellStyleUtil.getContentStyle()))                .doWrite(generateTestData());    }    private static class TestData {        @ExcelProperty(value = "第一列", index = 0)        @ColumnWidth(value = 22)        private Integer col1;        @ExcelProperty(value = "第二列", index = 1)        @ColumnWidth(value = 22)        private Integer col2;        @ExcelProperty(value = "第三列", index = 2)        @ColumnWidth(value = 22)        private Integer col3;        public TestData(Integer col1, Integer col2, Integer col3) {            this.col1 = col1;            this.col2 = col2;            this.col3 = col3;        }        public Integer getCol1() {            return col1;        }        public Integer getCol2() {            return col2;        }        public Integer getCol3() {            return col3;        }    }    private static List generateTestData() {        List testDataList = new ArrayList();        testDataList.add(new TestData(1, 2, 3));        testDataList.add(new TestData(4, 5, 6));        testDataList.add(new TestData(7, 8, 9));        testDataList.add(new TestData(7, 8, 9));        testDataList.add(new TestData(7, 8, 9));        testDataList.add(new TestData(7, 8, 9));        testDataList.add(new TestData(7, 8, 9));        return testDataList;    }}

诚挚地欢迎各位朋友一同交流学习,共同进步。让我们在知识的海洋中畅游,互相汲取智慧的养分,共同成长。愿每一次的交流都能激发新的思考,每一次的学习都能带来新的启示。

()

上一篇:织梦目录ID修改教程,轻松掌握,实用指南!

下一篇:现在这边还在招人没有啊?