Comment protéger le classur Excel via SXSSF?

J'ai un programme qui génère des rapports avec une grande quantité de données. J'ai travaillé correctement avec Apache POI SXSSF pour générer un file xlsx. http://poi.apache.org/spreadsheet/index.html

Ce que je n'ai pas trouvé dans leur documentation, c'est la façon de protéger par mot de passe le TOUJOURS WORKBOOK . Je le veux de sorte que si quelqu'un essaie d'ouvrir le file, il doit entrer un mot de passe afin de voir datatables.

Gardez à l'esprit que ceci est différent du mot de passe protégeant une seule feuille de travail où ils sont toujours en mesure d'ouvrir le file et de voir datatables, mais ont access en lecture seule.

Je n'ai rien trouvé dans la documentation de SXSSFWorkbook: https://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html

On dirait qu'il existe une méthode pour XSSFWorkbook appelée setWorkbookPassword mais qui n'existe pas pour SXSSF et n'a pas fonctionné sur le SXSSFWorkbook. https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFWorkbook.html#setWorkbookPassword(java.lang.Ssortingng,%20org.apache.poi.poifs.crypt.HashAlgorithm)

Quelqu'un sait comment cela peut être fait? Des solutions de rechange seront également sockets en considération.

Merci d'avance.

METTRE À JOUR

Je pensais peut-être utiliser un classur macro avec script pour le protéger par mot de passe comme cela a été suggéré ici. Java Apache Poi SXSSF avec Macros Excel

Et j'ai utilisé le code VBA à partir d'ici pour faire cela: http://analysistabs.com/excel-vba/protect-unprotect-workbook/ , puis utilisez ce file en tant que model lors de la création du file Excel, mais pendant que je jouais avec La Macro s'avère que ce n'est pas suffisant. Certains parameters de security de l'ordinateur sont définis sur "Haut" et désactiveront les macros, alors lorsque j'ai ouvert le file, j'ai eu une invite pour le mot de passe, mais j'ai également reçu un message d'avertissement indiquant que les macros sont désactivées et j'ai pu voir le classur Contenu.

Aucune suggestion?

"… Je ne pouvais pas find dans leur documentation la façon de protéger par mot de passe …" ???

avez-vous vu cette input de menu "Support de encryption" dans le menu de gauche sur la page principale de poi?

pour requestr une invite de mot de passe lors de l'ouverture (c'est-à-dire la lecture) du file, vous devez le chiffrer – voir "Formats basés sur XML – Cryptage"

et comme stackoverflow aime avoir tout dans un endroit – voici le code:

// create a new POIFSFileSystem, which is the container for // encrypted OOXML-based files POIFSFileSystem fs = new POIFSFileSystem(); EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile); // setup the encryption Encryptor enc = info.getEncryptor(); enc.confirmPassword("foobaa"); // after writing to the SXSSF workbook you need the content // as a stream InputStream is = <open the SXSSF workbook as stream> OutputStream os = enc.getDataStream(fs); // copy the stream to the OutputStream IOUtils.copy(is, os); // Write out the encrypted version FileOutputStream fos = new FileOutputStream("..."); fs.writeFilesystem(fos); fos.close();