0

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

写ExcelWithFormula {

    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的新手,请帮助谢谢!

4

1 回答 1

2

正如有关加密支持的 Apache POI 页面所解释的,HSSF 中对.xls文件的加密/保护支持是只读的。不支持更改或创建受密码保护的文件,只能.xls使用 HSSF 生成未受保护的文件。如果您在 HSSF 中打开受保护的文件并将其保存,则保护将被删除。

如果您需要使用 POI 生成受保护/加密的 Excel 文件,那么您唯一的选择是使用 XSSF 和.xlsx文件。XSSF 支持读取和写入受保护的文件,如何做到这一点的详细信息在加密支持页面上给出

于 2015-08-04T14:51:41.667 回答