请问有什么开源的项目支持导出加密的xls文件吗?

请问有什么开源的项目支持导出加密的xls文件吗?

试过java 的poi, easyexcel, c# 的 npoi, ExcelDataReader,python 的 msoffcrypto-tool

c++ 的 openoffice, libreoffice ,go 的 excelize都没有发现没有这个功能。

阅读 1.2k
avatarAI BotBETA

对于导出加密的XLS文件(即Excel 97-2003格式),许多开源库确实没有直接提供加密功能。然而,有一些方法可以实现这一需求:

  1. 自定义加密流程
    你可以在生成XLS文件后,使用其他库或工具(如ZIP库和加密算法)对文件进行加密。例如,你可以先将XLS文件作为一个ZIP文件处理(因为XLS本质上是一个ZIP包),然后应用加密算法(如AES)来加密ZIP的内容。用户接收文件后,将需要使用相应的解密工具或库来解密ZIP内容并提取XLS文件。
  2. 使用较新的Excel格式
    如果你能够切换到较新的Excel格式(如XLSX),那么选择就会更多。例如,Apache POI(对于Java)和EPPlus(对于C#)等库支持对XLSX文件进行加密。你可以创建XLSX文件,然后使用这些库提供的加密功能来保护它。
  3. 使用第三方工具或服务
    有时,你可以使用外部工具或服务来加密文件。这些工具可以作为你应用程序的一个步骤,或者你可以让用户自己下载并加密文件。
  4. 自定义开发
    如果你对Excel文件格式和加密有深入的了解,你可以尝试自定义开发一个加密库。但这是一个复杂且耗时的过程,通常不推荐这样做,除非你有特殊的需求或资源。
  5. 寻找或请求功能
    你可以搜索现有的开源项目,看是否有其他人已经实现了这一功能。如果没有,你可以考虑向某个项目的维护者提出功能请求,或者自己为项目贡献这个功能。
  6. 商业解决方案
    如果开源解决方案不可行,你可能需要考虑使用商业库或服务。这些产品通常提供更完整和稳定的解决方案,但可能会有许可或费用问题。

示例(Java + Apache POI + 自定义加密)

虽然Apache POI本身不直接支持加密XLS文件,但你可以使用以下策略:

  1. 使用Apache POI创建XLS文件。
  2. 使用Java的ZIP库(如java.util.zip)将XLS文件作为ZIP文件读取。
  3. 遍历ZIP中的条目,并对每个条目应用加密算法(如AES)。
  4. 将加密后的条目写回新的ZIP文件。
  5. 将新的ZIP文件保存为加密的XLS文件。

注意:这种方法会创建一个自定义的、非标准的加密XLS文件。你需要确保接收文件的用户有相应的解密工具或库来访问内容。

1 个回答
新手上路,请多包涵

Apache POI:功能强大的Java库,可以读取和写入Microsoft Office格式的文件,包括Excel。它支持加密功能。可以用POIFSFileSystem和EncryptionInfo类来创建加密的Excel文件。

import org.apache.poi.poifs.crypt.EncryptionInfo;
import org.apache.poi.poifs.crypt.Encryptor;
import org.apache.poi.poifs.crypt.StandardEncryptionHeader;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class ExcelEncryption {
    public static void main(String[] args) throws Exception {
        Workbook workbook = new XSSFWorkbook();
        // 创建工作表等
        POIFSFileSystem fs = new POIFSFileSystem();
        EncryptionInfo info = new EncryptionInfo(fs);
        Encryptor enc = info.getEncryptor();
        enc.confirmPassword("yourPassword");

        try (OutputStream os = enc.getDataStream(fs)) {
            workbook.write(os);
        }

        try (FileOutputStream fos = new FileOutputStream("encryptedExcel.xlsx")) {
            fs.writeFilesystem(fos);
        }
    }
}
推荐问题
logo
Microsoft
子站问答
访问
宣传栏