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

excel导出加密

在Java中导出Excel并为其设置密码可以通过Apache POI库实现。Apache POI是一个强大的Java库,用于操作Microsoft Office格式的文件,包括Excel。要为导出的Excel文件设置密码,可以使用XSSFWorkbook类(用于生成Excel 2007及以上版本)和POIFSFileSystem。

1、引入maven

<dependencies>
    <!-- Apache POI for Excel -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>4.1.2</version> 
    </dependency>
    <dependency>
        <groupId>org.apache.xmlbeans</groupId>
        <artifactId>xmlbeans</artifactId>
        <version>5.0.2</version> 
    </dependency>
</dependencies>

2、代码实现

package com.meritdata.ddc.common;


import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackageAccess;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.apache.poi.poifs.crypt.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.security.Security;

public class ExcelExportWithPassword {
    public static void main(String[] args) throws Exception {
        // 第一步:使用 Apache POI 创建一个 Excel 工作簿
        Workbook workbook = new XSSFWorkbook();  // 创建一个新的 XSSFWorkbook,表示一个 Excel 文件
        Sheet sheet = workbook.createSheet("Sheet1");  // 在工作簿中创建一个名为 "Sheet1" 的工作表

        // 创建第一行,并向其中的单元格写入数据
        Row row = sheet.createRow(0);  // 创建第一行(索引为 0)
        Cell cell = row.createCell(0);  // 在第一行创建第一个单元格
        cell.setCellValue("Hello, World!");  // 在单元格中写入 "Hello, World!" 字符串

        // 将工作簿写入到一个未加密的 Excel 文件中
        String filePath = "unEncrypt.xlsx";  // 未加密 Excel 文件的文件路径
        try (FileOutputStream fileOut = new FileOutputStream(filePath)) {
            workbook.write(fileOut);  // 将工作簿内容写入文件
        }
        workbook.close();  // 写入完成后关闭工作簿,释放资源

        // 第二步:使用 Bouncy Castle 添加密码保护
        Security.addProvider(new BouncyCastleProvider());  // 添加 Bouncy Castle 提供者以支持加密

        // 创建一个新的 POIFSFileSystem 对象,用于保存加密的数据
        POIFSFileSystem fs = new POIFSFileSystem();

        // 创建加密信息,使用 Agile 模式(现代 Office 文件使用的加密模式)
        EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile);
        Encryptor encryptor = info.getEncryptor();  // 创建一个加密器
        encryptor.confirmPassword("dxj");  // 设置加密文件的密码

        // 使用 OPCPackage 打开未加密的 Excel 文件
        try (OPCPackage opc = OPCPackage.open(new File(filePath), PackageAccess.READ_WRITE);
             OutputStream os = encryptor.getDataStream(fs)) {
            opc.save(os);  // 将未加密的 Excel 数据写入到加密流中
        }

        // 将加密后的 Excel 文件保存为一个新文件
        try (FileOutputStream fos = new FileOutputStream("encrypt.xlsx")) {
            fs.writeFilesystem(fos);  // 将文件系统内容写入文件
        }

        System.out.println("带有密码的 Excel 文件已成功创建!");
    }
}


http://www.kler.cn/news/359641.html

相关文章:

  • IDEA下lombok安装及找不到get,set的问题的解决方法
  • 【Python-AI篇】数据结构和算法
  • Dockerfile 中 Expose 命令的作用
  • Spring 中的 @AUtowire 和 @Resource 用法和原理,以及避坑
  • 24.安卓逆向-frida基础-objection工具3-实战
  • RabbitMQ系列学习笔记(八)--发布订阅模式
  • linux线程 | 同步与互斥 | 线程池以及知识点补充
  • 轻帆云移动端智能语音提单:一键触达,智能工单新体验,助力高效运营
  • 分布式篇(分布式事务)(持续更新迭代)
  • 出栈序列的合法性判断
  • PyCharm借助MobaXterm跳板机连接服务器
  • laydate.laydate.render()开始日期和结束日期选择器互相限制选择值动态生效
  • 了解 ChatGPT 中的公平性问题
  • 基于MATLAB的混沌序列图像加密程序
  • 深入理解计算机系统--计算机系统漫游
  • 专题:数组(已完结)
  • 企业一级流程架构规划方法
  • 如何在Docker中运行Squid
  • 3.Three.js程序基本框架结构和API说明
  • 微软运用欺骗性策略大规模打击网络钓鱼活动