使用 Apache POI 创建受密码保护的 Excel 文件?

2024-01-05

我正在开发一个简单的 Java 程序来使用 (Apache POI) API 创建 Excel 文件。 我使用 Oracle 10g 作为数据库并使用 ojdbc14 JAR 文件。

我有一个名为 USERINFO 的表,有三列,即USERNAME, PASSWORD, and NAME.现在使用 Apache POI,我已经能够将所有行放入 Excel 文件中。

由于该文件包含用户名和密码等敏感数据,因此我想对其进行密码保护。 在论坛上,我找到了如何读取受密码保护的文件,但没有找到如何创建它们。 那么我怎样才能实现这一目标呢?


Updated:从 3.10 版开始,POI 支持 XLSX 文件的加密和解密。看POI 网站上的“加密支持”页面 http://poi.apache.org/encryption.html。以下内容仍然与 XLS 二进制工作簿相关。

根据POI 网站上的“加密支持”页面 http://poi.apache.org/encryption.htmlPOI支持读取加密的XLS和XLSX文件。该页面上没有提到加密,这意味着它不受支持。这得到了支持在 POI 网站上搜索“加密” http://www.google.com/search?q=site%3Apoi.apache.org+encrypt它只返回少数结果,所有这些结果都与解密有关。我还查看了他们的加密实现的来源,它似乎只处理解密。这并不奇怪; POI 旨在用于数据提取和搜索索引,而不是用于创建新的电子表格。

正如其他人所建议的,通常可以通过在 Excel 中创建模板,然后使用 POI 填充数据来解决 POI 中缺少的功能。不幸的是,这不适用于加密,因为加密电子表格的文件格式完全不同。

如果您愿意付费购买商业软件,最新版本的对 Excel 支持的所有加密格式具有完整的读写支持。只需构造一个EncryptedWorkBookHandle而不是正常的WorkBookHandle。这将使用未经修改的 JRE、XLS 的 RC4 和 XLSX 的 128 位 AES 支持的最强密码。如果您想将 256 位 AES 与 OOXML 结合使用并且您已经安装了JCE无限保单 http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html你可以这样做MSOfficeEncrypter class.

JExcelAPI http://jexcelapi.sourceforge.net/,一种流行的开源 Java 电子表格 API,似乎根本不支持加密。Aspose.Cells http://www.aspose.com/categories/java-components/aspose.cells-for-java/default.aspx,商业产品,支持强加密 http://www.aspose.com/documentation/java-components/aspose.cells-for-java/setting-strong-encryption-type.html。 Actuate 的 e.Spreadsheet 的文档似乎已经从网络上消失了,所以我无法判断它是否支持加密。

由于免费提供的 Java 电子表格 API 似乎都不支持编写加密电子表格,因此如果您不愿意使用商业软件,则需要想出一个解决方法。例如,您可以将电子表格写入加密的 ZIP 文件中。java.util.zip不支持加密,但看起来像Zip4j http://www.lingala.net/zip4j/ does.

全面披露:我在 Extentech 工作,这是 ExtenXLS 背后的公司。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Apache POI 创建受密码保护的 Excel 文件? 的相关文章

  • UcanaccessSQLException:UCAExc:::3.0.1 表达式的数据类型不是布尔值

    我有一张如下图所示的表格 我需要获取其库尔德语单词包含的所有英语单词 r 所以我不能使用 select English from Table1 where Kurdish like 因为它还接受另一个单词中的子字符串 例如 当我尝试在查询中
  • 查找所有数组的长度多维数组,Java

    我想使用多维数组来存储数据网格 但是 我还没有找到一种简单的方法来查找长度2nd数组的一部分 例如 boolean array new boolean 3 5 System out println array length 只会输出3 是否
  • org.openqa.selenium.NoSuchSessionException:会话 ID 为空。调用 quit() 后使用 WebDriver?

    我已经进行了一些搜索 但仍然遇到同样的问题 我相信这可能是由于我的网络驱动程序是静态的造成的 我不太确定 在我的主课中 我包括了 BeforeTest and AfterTest BeforeTest包括根据我的 XML 文件启动新浏览器
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • 为什么当达到 InitiatingHeapOccupancyPercent 时 G1 不开始标记周期?

    根据文档 http www oracle com technetwork articles java g1gc 1984535 html XX InitiatingHeapOccupancyPercent 设置触发标记周期的Java堆占用阈
  • 为什么不自动装箱泛型的 Java 基本类型?

    Java 不允许在通用数据结构中使用原始类型 例如 不允许使用 ArrayList 原因是 原始类型不能直接转换为Object 然而 Java 1 5 确实支持自动装箱 并且包装类在通用数据结构中工作 那么为什么编译器不能将其自动装箱到 A
  • Eclipse RCP - 将视图与编辑器区域堆叠?

    在开发 Eclipse RCP 应用程序时 是否可以将视图与编辑器区域堆叠在一起 像这样 我有多个列表 表格 我想创建一种预览组合 当通过单击鼠标选择列表上的项目时 我希望我的预览合成显示该项目的数据 如果用户双击某个项目 我想在预览合成后
  • Java ArrayList 和 HashMap 动态

    有人可以提供一个创建Java的例子吗ArrayList and HashMap在飞行中 所以而不是做一个add or put 实际上在类实例化时为数组 哈希提供种子数据 举个例子 类似于 PHP 的例子 array array 3 1 2
  • java中永远不会出现的异常

    我为点和向量编写一个类 我想用它们来计算向量的点和范数 这些是点类和向量类 public class Point public float x y public class MyVector public Point start end 我
  • IntelliJ - 无效源版本:17

    我已经在 IntelliJ 中使用 Gradle 创建了一个使用 Java 17 的新 Java 项目 运行我的应用程序时出现错误Cause error invalid source release 17 我的设置 我已经安装了openjd
  • SQlite 获取最近的位置(带有纬度和经度)

    我的 SQLite 数据库中存储有纬度和经度的数据 我想获取距我输入的参数最近的位置 例如我当前的位置 纬度 经度等 我知道这在 MySQL 中是可能的 并且我已经做了相当多的研究 SQLite 需要一个自定义外部函数来实现半正弦公式 计算
  • JavaFX Integer Spinner (IntegerSpinnerValueFactory) 不会将值回绕到最小值

    我创建了一个带有值的整数微调器 min 5 max 15 and initialValue 12 and wrapAround true 一旦旋转器到达max 15 增量期间的值 而不是将值重置为min 5 正如它所说文档 https op
  • Java DNSLookup MX 记录列表。类似于 MXToolBox

    我正在构建一个程序来列出域的所有 MX 记录 起初似乎工作正常 但与在线工具进行比较后http mxtoolbox com http mxtoolbox com 有些域程序无法获取 MX 记录 而 MXToolbox 可以 我不确定原因是什
  • Eclipse Juno 指标插件

    Eclipse JUNO 版本有哪些 Eclipse 指标插件 我尝试了一些通用指标插件 但没有一个能够在 Eclipse 的 JUNO 版本中正常运行 差点忘了 我们正在使用 Java 作为编程语言 我想要诸如圈复杂度 代码行数 方法长度
  • “强制更新快照/版本” - 这是什么意思

    在 Maven 项目中 选择 更新项目 时 有一个名为 强制更新快照 版本 的选项 它有什么作用 强制更新快照 版本 就像运行以下命令 mvn U install U 也可以用作 update snapshot 看here http boo
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • 在Java内存管理中,“PS”代表什么?

    每当我看到 Java 中对内存的引用时 各种空格总是以 PS 为前缀 PS 是什么意思 它开始困扰我 到目前为止我唯一的猜测是 泳池空间 但这将是多余的 例子 PS伊甸园空间 PS 幸存者空间 PS 终身空间 老一代 PS Perm Gen
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • 如何在 Hibernate 中自动递增复合主键中的 Id?

    我有一个带有复合主键的表 groupId and batchId 实体类看起来像 Entity name EMPLOYEE public class Employee EmbeddedId private EmployeePK employ
  • Java有没有类似微软CHESS的工具?

    是否有类似于 Microsoft 的现有 Java 工具CHESS http research microsoft com chess 或者 CHESS 源代码是否开放 以便我可以尝试将其转换为 Java 谷歌的织线工 http code

随机推荐