Java 删除与重置 Excel 文件密码(文件级与工作表级完整示例)

5 阅读5分钟

Excel 文件往往承担着数据存储、报表输出或业务交换的重要角色。但当这些文件被设置了密码保护后,自动化处理流程就会受到限制。例如,程序在读取文件时因为文件级密码无法加载内容;或者文件可以正常打开,但工作表被保护,导致数据无法修改或写入。

这类问题在 Java 后端项目中并不少见。尤其是在报表系统、数据导入导出模块、批量处理工具等场景下,如果处理不当,就会直接影响系统的稳定性和数据处理效率。

本文将通过完整的 Java 示例,系统讲解如何:

  • 检测 Excel 文件是否已设置打开密码
  • 删除文件密码
  • 重置文件密码
  • 解除指定工作表的保护

Excel 密码保护机制概述与挑战

在深入具体实现之前,有必要先了解 Excel 密码保护的基本机制。

Excel 的密码保护主要分为两大类:

1. 工作簿保护

这类密码用于控制文件的打开权限。如果文件设置了打开密码,在没有提供正确密码的情况下,将无法加载或读取文件内容。该保护作用于整个工作簿层级。

2. 工作表保护

该保护机制针对单个工作表。用户可以正常打开文件,但无法对受保护的工作表进行编辑、插入、删除、格式修改等操作,除非输入正确密码。

对于 .xlsx 格式文件,其底层基于 Office Open XML(OOXML)标准构建。从技术角度来看,.xlsx 文件本质上是一个 ZIP 压缩包,内部包含多个 XML 文件,用于描述工作簿结构、数据内容、样式信息以及安全属性。

理论上,可以通过解压 .xlsx 文件并手动修改内部 XML 内容来移除密码信息。然而,这种方式存在明显风险:

  • OOXML 结构复杂且版本差异明显
  • 修改不当容易导致文件损坏
  • 不适合企业级批量处理
  • 后期维护成本较高

因此,在 Java 项目中,更推荐使用成熟的 API 来完成这些操作,以保证稳定性与可维护性。Spire.XLS for Java 正是这样一款组件,它封装了底层加密与结构处理逻辑,提供了简洁清晰的接口,使开发者可以高效实现 Excel 文件密码的删除与重置。

集成 Spire.XLS

在开始编写代码前,需要将 Spire.XLS 集成到你的 Java 项目中。

1. 使用 Maven 集成

如果项目使用 Maven 管理依赖,可以在 pom.xml 中添加以下内容:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.xls</artifactId>
        <version>16.1.3</version>
    </dependency>
</dependencies>

添加完成后刷新 Maven 依赖即可使用。

2. JAR 文件集成

如果未使用 Maven,可以从官方网站下载 JAR 文件,并将其手动导入到项目。

完成集成后即可调用相关 API 进行 Excel密码删除与重置操作。

示例一、使用 Java 删除 Excel 文件密码

在执行密码删除操作之前,建议首先检测文件是否设置了打开密码,以避免不必要的异常,并使业务逻辑更加清晰。

以下示例展示了如何使用 Java 检测 Excel 文件是否有密码,并在确认已加密的情况下解除其密码保护:

import com.spire.xls.*;

public class RemoveExcelPassword {
    public static void main(String[] args) {

        String filePath = "C:\Users\Administrator\Desktop\Encrypted.xlsx";

        Workbook wb = new Workbook();

        // 检测文件是否设置打开密码
        boolean isProtected = Workbook.isPasswordProtected(filePath);

        if (isProtected) {

            // 设置原始打开密码
            wb.setOpenPassword("oldpassword");

            // 加载加密文件
            wb.loadFromFile(filePath);

            // 解除文件级保护
            wb.unProtect();

            // 保存为无密码文件
            wb.saveToFile("C:\Users\Administrator\Desktop\Unprotected.xlsx");

            System.out.println("密码已成功删除。");

        } else {
            System.out.println("该文件未设置打开密码。");
        }

        wb.dispose();
    }
}

实现说明:

  • Workbook.isPasswordProtected(String filePath) 用于检测文件是否设置了打开密码。
  • 在加载加密文件前,必须调用 setOpenPassword() 指定原始密码。
  • unProtect() 方法用于移除文件密码保护。
  • 保存文件时不再设置密码,即可生成无密码版本。

示例二、使用 Java 重置 Excel 文件密码

如果不希望删除密码,而是将原密码修改为新密码,可以在解除旧密码后重新设置新密码。

以下是如何使用 Java 重置 Excel 文件密码的示例代码:

import com.spire.xls.Workbook;

public class ResetExcelPassword {
    public static void main(String[] args) {
        // 创建 Workbook 对象
        Workbook wb = new Workbook();
        
        // 设置旧密码
        wb.setPassword("oldpassword");
        
        // 加载加密的 Excel 文件
        wb.loadFromFile("C:\Users\Administrator\Desktop\Encrypted.xlsx");
                
        // 设置新密码
        wb.setPassword("newpassword");
        
        // 保存文件
        wb.saveToFile("C:\Users\Administrator\Desktop\Encrypted_with_new_password.xlsx");
    }
}

示例三、使用 Java 取消 Excel 指定工作表的密码保护

除了文件打开密码外,Excel 还可能对单个工作表进行保护。即使文件本身未加密,某些工作表仍可能处于锁定状态。

以下示例展示了如何使用 Java 取消 Excel指定工作表的密码保护:

import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;

public class RemoveSheetPassword {
    public static void main(String[] args) {

        Workbook wb = new Workbook();
        wb.loadFromFile("C:\Users\Administrator\Desktop\SheetProtected.xlsx");

        // 获取第一个工作表
        Worksheet sheet = wb.getWorksheets().get(0);

        // 如果工作表设置了密码,需要提供正确密码
        sheet.unprotect("sheetpassword");

        wb.saveToFile("C:\Users\Administrator\Desktop\SheetUnprotected.xlsx");

        System.out.println("工作表保护已解除。");

        wb.dispose();
    }
}

在该示例中:

  • 文件本身无需设置打开密码(如果文件也加密,则需先解锁)。
  • 通过 sheet.unprotect() 解除工作表级保护。
  • 保存文件后,目标工作表将恢复可编辑状态。

注意事项

  • 密码保护的文件: 确保你知道文件的密码,否则无法进行密码删除或重置操作。
  • 工作表保护: 解除工作表保护时需要提供正确的密码。如果密码错误,将无法解除保护。
  • 保存文件: 修改密码后,需要保存文件,否则修改将不会生效。

总结

本文系统介绍了如何使用 Java 实现 Excel 文件密码的删除与重置,涵盖了:

  • Excel 两种密码机制
  • 文件加密检测
  • 删除文件密码
  • 重置密码
  • 解除工作表保护

通过这些操作,你可以更灵活地管理 Excel 文件的安全性。如果你需要对更多 Excel 文件进行操作,或者希望了解更多功能,可以参考相关库的文档。