0

プロセスに必要な Excel ファイルを読み書きする apache poi を使用して 2 つのクラスを作成しました。これらの Excel ファイルは、ブックの保護を使用してパスワードで暗号化されます。暗号化は機能し、Excel リーダーは間違ったパスワード入力を受け入れません (MS Excel で手動でパスワードを設定した場合)。ただし、パスワードで暗号化されるはずの Excel ライターによって生成された Excel ファイルは機能しません。リーダーが生成された Excel ファイルを読み取ると、任意のパスワードを受け入れ、Excel ファイル内のデータを取得できます。ただし、MS Excel を使用して 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 の初心者です。よろしくお願いします。

4

1 に答える 1

2

暗号化サポートに関する Apache POI ページで説明されているように、HSSF での.xlsファイルの暗号化/保護サポートは読み取り専用です。パスワードで保護されたファイルの変更または作成はサポートされていません.xls。HSSF で生成できるのは、保護されていないファイルのみです。保護されたファイルを HSSF で開いて保存すると、保護が解除されます。

POI を使用して保護/暗号化された Excel ファイルを生成する必要がある場合、唯一のオプションは XSSF と.xlsxファイルを使用することです。XSSF は、保護されたファイルの読み取りと書き込みの両方をサポートしています。その方法の詳細については、暗号化サポート ページを参照してください。

于 2015-08-04T14:51:41.667 に答える