easyexcel 3.0.x 版本实现指定列 锁定以及指定列隐藏

这篇具有很好参考价值的文章主要介绍了easyexcel 3.0.x 版本实现指定列 锁定以及指定列隐藏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1:效果示例

easyexcel 3.0.x 版本实现指定列 锁定以及指定列隐藏,SpringBoot,java,开发语言

easyexcel 3.0.x 版本实现指定列 锁定以及指定列隐藏,SpringBoot,java,开发语言

2:代码示例:

UnLockCell.java
package com.example.juc.zhujie;

/**
 * @Author 
 * @Date Created in  2023/12/19 10:09
 * @DESCRIPTION:
 * @Version V1.0
 */

import java.lang.annotation.*;

/**
 * 用于标记锁定哪些列不需要锁定
 * @author 12926
 */
@Target(value = {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface UnLockCell {


}

 实例类:

package com.example.juc.studyExcel.entity;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.example.juc.zhujie.UnLockCell;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Author x
 * @Date Created in  2023/12/6 8:31
 * @DESCRIPTION:
 * @Version V1.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {

    @ExcelProperty("用户id")
    @UnLockCell
    private String id;

    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("年龄")
    @ColumnWidth(5)
    private String age;
}

controller层:

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteWorkbook;
import com.example.juc.studyExcel.entity.Student;
import com.example.juc.test.handler.CellHandler;
import com.example.juc.test.handler.LockSheetWriteHandler;
import com.example.juc.test.handler.StyleWriteHandler;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @Author 
 * @Date Created in  2023/12/16 16:32
 * @DESCRIPTION:
 * @Version V1.0
 */
@RestController
@RequestMapping("testSuoding")
public class 测试excel列锁定 {
    /**
     * 文件下载(失败了会返回一个有部分数据的Excel)
     * <p>
     * 1. 创建excel对应的实体对象 参照{@link }
     * <p>
     * 2. 设置返回的 参数
     * <p>
     * 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大
     */
    @GetMapping("download")
    public void download(HttpServletResponse response) throws IOException {
        List<Student> list = new ArrayList<>();
        list.add(new Student("1","夏天","18"));
        list.add(new Student("2","夏天","18"));
        list.add(new Student("3","夏天","18"));
        list.add(new Student("4","夏天","18"));
        list.add(new Student("5","夏天","18"));
        // 设置响应头
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(),Student.class)
                .registerWriteHandler(new LockSheetWriteHandler())  //锁整张sheet
                .registerWriteHandler(new CellHandler(1))  //根据自定义注解解锁某些特定的列
                .sheet("模板")
                .doWrite(list);
    }
}
LockSheetWriteHandler.java
package com.example.juc.test.handler;

import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFSheet;

import java.util.UUID;

/**
 * @author 夏
 * @since 2024/1/12 16:08
 */
public class LockSheetWriteHandler implements SheetWriteHandler {

    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    }

    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        Sheet sheet = writeSheetHolder.getSheet();
        //锁定工作簿,设置保护密码
        String passWord = UUID.randomUUID().toString();
        sheet.protectSheet(passWord);
        // 锁定单元格不可选中(防止别人直接复制内容到其他excel修改)
        ((SXSSFSheet) writeSheetHolder.getSheet()).lockSelectLockedCells(true);
    }
}
CellHandler.java
package com.example.juc.test.handler;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.data.CellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import com.example.juc.zhujie.UnLockCell;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellUtil;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author xlj
 * @Date Created in  2023/12/19 10:11
 * @DESCRIPTION:
 * @Version V1.0
 */
public class CellHandler implements CellWriteHandler {

    private static final String PASSWORD = "1qaz!QAZ";

    private static final Integer A = 1;
    private static final Integer B = 0;

    private final Integer bigData;
    public CellHandler(int i) {
        this.bigData = i;
    }

    @Override
    public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
    }
    @Override
    public int order() {
        return Integer.MAX_VALUE;
    }
    @Override
    public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
    }

    @Override
    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
        if (isHead) {
            return; // 不处理表头
        }

        String fieldName = head.getFieldName();
        Class<?> clazz = writeSheetHolder.getClazz();
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            if (field.getName().equals(fieldName)) {
                if (field.isAnnotationPresent(UnLockCell.class) && field.isAnnotationPresent(ExcelProperty.class)) {
                    Map<String, Object> properties = new HashMap<>(1);
                    properties.put(CellUtil.LOCKED, false);
                    CellUtil.setCellStyleProperties(cell, properties);
                    Sheet sheet = writeSheetHolder.getSheet();
                    if (bigData == 1) {
                        sheet.setColumnHidden(A,true);
                    } else {
                        sheet.setColumnHidden(B,true);
                    }

                }
            }
        }
    }

}

注意:

pom依赖如下:文章来源地址https://www.toymoban.com/news/detail-786698.html

      <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.2</version>
        </dependency>

       <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.1</version>
        </dependency>

到了这里,关于easyexcel 3.0.x 版本实现指定列 锁定以及指定列隐藏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑

    Git/ SVN 是代码界的版本控制工具,那么,Flyway 就是一款数据库界的版本控制工具, 它可以记录数据库的变化记录。可能很多公司都是通过人工去维护、同步数据库脚本, 但经常会遇到疏忽而遗漏的情况,举个简单的例子: 我们在开发环境对某个表新增了一个字段,而提交测

    2024年02月13日
    浏览(44)
  • python和numpy matplotlib版本匹配,以及安装指定版本库

    Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python. 已知的兼容版本:     python3.6;     numpy1.16.3或者1.18.2;     pandas0.24.2;     matplotlib3.0.3     scipy 1.3.1     scikit-learn==0.22.1 其他库类似 安装指定版本的库 或 亲测pi

    2024年02月11日
    浏览(48)
  • node版本与npm版本的关系以及如何安装指定版本的npm包

    正常情况下一个电脑装了node,就会自动安装好该node版本对应的npm包,但是有时候拿到一个新项目,很容易遇到node/npm版本过高或过低导致项目的依赖无法下载安装的问题。 在官网这里可以查到指定某个版本的node与npm之间的关系 这时候就需要降低/升高自己的node版本。如果是

    2024年02月12日
    浏览(46)
  • Ubuntu Server版 之 apache系列 常用配置 以及 隐藏 版本号 IP、Port 搭建服务案例

    查看版本 旧的 用 httpd -v 新的 用 apache2 -v 配置检测 旧的 httpd -t 新的 apachectl configtest window用的apache 是 httpd -t Linux 中 apachectl configtest 主配置文件 之前旧版apache 是httpd 现在都改成 apache2 /etc/apache2/apache2.conf window中 httpd.conf 修改默认的网站根目录 apache2为了安全起见,只允许/v

    2024年02月15日
    浏览(44)
  • 查看NodeJS与npm对应版本以及指定安装特定版本的npm(可查)

    官网信息链接:https://nodejs.org/zh-cn/download/releases/ 安装指定版本的npm 1.安装淘宝镜像 即 npm转cnpm 防止npm安装过慢 2.查看当前node版本(我的大版本是16) 3.查看当前npm版本,安装node.js对应版本的npm 3.确认是否安装成功 (打开命令行,然后输入)

    2024年02月17日
    浏览(58)
  • 【EasyExcel】在SpringBoot+VUE项目中引入EasyExcel实现对数据的导出(封装工具类)

    一、引入EasyExcel 通过maven引入,坐标如下: 二、后端代码演示 下面以权限系统中的角色列表为案例,演示如何导出数据 实体类 工具类 通过@Component把工具类交给spring管理,在需要使用的地方使用@Resource注入即可 将泛型设置为 \\\" ? \\\",来表示任意类型,可以通过这一个方法完成

    2024年02月16日
    浏览(56)
  • 【案例实战】SpringBoot整合EasyExcel实现列表导出功能

    这篇文章会给大家实操一个关于列表导出成excel表格的功能,相信大家在日常工作中也会遇到列表导出的需求,看完本篇文章那么你就可以轻松的去整合列表导出的功能。 本次使用的导出工具是阿里巴巴开源的EasyExcel,关于EasyExcel我这里简单的介绍一下: 我们知道Java解析、

    2024年02月08日
    浏览(49)
  • springboot中使用EasyExcel实现Excel 导入导出

    EasyExcel 是一款基于 Java 的简单易用的 Excel 文件操作工具。它提供了丰富的 API,可以方便地读取、写入和操作 Excel 文件,支持常见的 Excel 操作,如读取/写入单元格数据、合并单元格、设置样式、处理大数据量等。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将

    2024年02月12日
    浏览(64)
  • Spring Boot 引入 easyexcel 最新版本 3.3.2,实现读写 Excel

    EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能 在 Spring Boot 环境中使用 easyexcel,需要完成以下几个步骤 pom.xml中引入easyexcel的依赖,此处版本号3.3.2 建立一个实体

    2024年02月11日
    浏览(35)
  • SpringBoot 集成 EasyExcel 3.x 实现 Excel 导出

    目录   EasyExcel官方文档 EasyExcel是什么? EasyExcel注解  springboot集成EasyExcel 简单入门导出 : 实体类  自定义转换类 测试一下 复杂表头一对多导出 :   自定义注解 定义实体类 自定义单元格合并策略  测试一下     EasyExcel官方文档 EasyExcel官方文档 - 基于Java的Excel处理工具

    2024年02月13日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包