为我的 excel reader 提供的错误密码接受 excel 作者生成的文件

Wrong password provided for my excel reader accepts the generated file of the excel writer

我使用 apache poi 创建了两个 类,用于读取和写入进程所需的 excel 文件。这些 excel 文件使用保护工作簿使用密码加密。加密有效,excel reader 不接受错误的密码输入(如果您在 MS excel 中手动设置密码)。但是,excel 编写器生成的本应使用密码加密的 excel 文件不起作用。当 reader 读取生成的 excel 文件时,它接受任何密码并能够获取 excel 文件中的数据。但是当你通过MSexcel手动打开excel文件时,它是用密码加密的。

writeExcelWithFormula {

    HSSFWorkbook workbook = new HSSFWorkbook();
    Sheet sheet = workbook.createSheet("Batch ACE");
    FileOutputStream fos = new FileOutputStream(fileName);
    workbook.write(fos);
    fos.close();
    encryptFile(fileName,employeeList);

加密文件{

try {           

         fileInput = new FileInputStream(fileName);         
         bufferInput = new BufferedInputStream(fileInput);            
         poiFileSystem = new POIFSFileSystem(bufferInput);            

         Biff8EncryptionKey.setCurrentUserPassword("password");            
         HSSFWorkbook workbook = new HSSFWorkbook(poiFileSystem, true);            
         HSSFSheet sheet = workbook.getSheetAt(0);
         sheet.setDefaultColumnWidth(25);

//create data....
         fileOut = new FileOutputStream(fileName);
                          workbook.writeProtectWorkbook(Biff8EncryptionKey.getCurrentUserPassword(), "");
         workbook.write(fileOut);

手动加密工作正常(通过 MS excel 打开)。我在 bonita bpm 中使用这些 类。我是 apache poi 和 bonita 的新手,请帮助谢谢!

Apache POI page on encryption support 中所述,HSSF 中对 .xls 文件的 encryption/protection 支持是只读的。不支持更改或创建受密码保护的文件,HSSF 只能生成未受保护的 .xls 文件。如果您在 HSSF 中打开一个受保护的文件,然后保存它,保护将被移除。

如果您需要使用 POI 生成受保护/加密的 Excel 文件,那么您唯一的选择是使用 XSSF 和 .xlsx 文件。 XSSF 支持读取和写入受保护的文件,如何操作的详细信息在 encryption support page

上给出