当前位置: 首页 > article >正文

《使用EasyExcel在Excel中增加序号列的方法》

《使用EasyExcel在Excel中增加序号列的方法》

    • 1、简介
    • 2、正文
    • 3、核心代码
    • 4、使用方法
    • 5、效果

1、简介

在处理Excel文件时,有时候需要为表格增加序号列。本文介绍了如何使用Java代码实现在Excel中增加序号列的功能,并提供了一个示例代码。

2、正文

在处理Excel文件时,有时候我们需要在表格中增加序号列,以便更好地标识每一行的顺序。下面是一个使用Java代码在Excel中增加序号列的示例:

3、核心代码

/**
 * 增加序号列
 *
 * @author xiangtianlei
 * @date 2023/11/14
 */
@Component
public class AddNoHandler implements RowWriteHandler {

    private boolean init = true;

    @Override
    public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
                                Integer rowIndex, Integer relativeRowIndex, Boolean isHead) {
        if (init) {
            // 修改存储头部及对应字段信息的 map, 将其中的内容均右移一位, 给新增的序列号预留为第一列
            ExcelWriteHeadProperty excelWriteHeadProperty = writeSheetHolder.excelWriteHeadProperty();
            Map<Integer, Head> headMap = excelWriteHeadProperty.getHeadMap();
            Map<Integer, ExcelContentProperty> contentMap = excelWriteHeadProperty.getContentPropertyMap();
            int size = headMap.size();
            for (int current = size; current > 0; current--) {
                int previous = current - 1;
                headMap.put(current, headMap.get(previous));
                contentMap.put(current, contentMap.get(previous));
            }
            // 空出第一列
            headMap.remove(0);
            contentMap.remove(0);
            // 只需要修改一次 map 即可, 故使用 init 变量进行控制
            init = false;
        }
    }

    @Override
    public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row,
                               Integer relativeRowIndex, Boolean isHead) {
        // 在行创建完成后添加序号列
        Cell cell = row.createCell(0);
        int rowNum = row.getRowNum();
        if (rowNum == 0) {
            cell.setCellValue("序号");
        } else {
            cell.setCellValue(rowNum);
        }
    }

    @Override
    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row,
                                Integer relativeRowIndex, Boolean isHead) {
        if (row.getLastCellNum() > 1) {
            // 将自定义新增的序号列的样式设置与默认的样式一致
            row.getCell(0).setCellStyle(row.getCell(1).getCellStyle());
        }
    }

}

4、使用方法

WriteSheet writeSheet = EasyExcel.registerWriteHandler(new AddNoHandler()).build()

5、效果

注:不需要在DTO类中定义序号列

![在这里插入图片描述](https://img-blog.csdnimg.cn/d603162cb1a6414faa75d78c90913a71.png


http://www.kler.cn/a/131900.html

相关文章:

  • Boolean源码解剖学
  • chardet检测文件编码,使用生成器逐行读取文件
  • 【Debug】查询的数据量比数据库中的数据量还要多
  • AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):FreeRTOS移植
  • Java智慧工地SaaS管理平台源码:AI/云计算/物联网
  • 基于DE10-Standard Cyclone V SoC FPGA学习---开发板简介
  • 几种常用的排序
  • K8s Pod 创建埋点处理(Mutating Admission Webhook)
  • node 第十九天 使用node插件node-jsonwebtoken实现身份令牌jwt认证
  • 【算法】算法题-20231118
  • WPF中可视化树和逻辑树的区别是什么
  • 【Python大数据笔记_day10_Hive调优及Hadoop进阶】
  • Kafka 集群如何实现数据同步?
  • ios 网站打包操作步骤介绍
  • [Python学习笔记]multiprocess 多进程间变量共享
  • 微服务的注册发现和微服务架构下的负载均衡
  • jenkins清理缓存命令
  • 农户建档管理系统的设计与实现-计算机毕业设计源码20835
  • 从零搭建微服务架构:Spring Boot与Nacos完美整合
  • OpenCV技术应用(4)— 如何改变图像的透明度