Lire fichier xlsx à l'aide de POIFSFileSystem
J'ai besoin d'ôter la protection d'une protégé fichier xlsx.e.g Book1.xlsx
Ci-dessous le code fonctionne très bien pour la première fois, Lit Book1.xlsx, de les décrypter et de nouveau écrire sur le même nom de fichier.
public static void unprotectXLSXSheet(String fileName, String password) {
try{
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fileName));
EncryptionInfo info = new EncryptionInfo(fs);
Decryptor d = Decryptor.getInstance(info);
d.verifyPassword(password);
InputStream is = d.getDataStream(fs);
System.out.println(is.available());
XSSFWorkbook wb = new XSSFWorkbook(OPCPackage.open(is));
FileOutputStream fileOut;
fileOut = new FileOutputStream(fileName);
wb.write(fileOut);
fileOut.flush();
fileOut.close();
}catch(FileNotFoundException ex){
ex.printStackTrace();
}catch(IOException ex){
ex.printStackTrace();
Mais quand même code tente d'accéder à la fonction nouvellement créée non protégés Book1.xlsx(ou n'importe quelle autre non protégés fichier xlsx), il échoue et montrant
Exception in thread "main" org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:131)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:104)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:138)
at com.wolseley.Excel.TestMainDummy.unprotectXLSXSheet(TestMainDummy.java:113)
at com.wolseley.Excel.TestMainDummy.main(TestMainDummy.java:52)
j'ai besoin d'aide dans la lecture de fichier xlsx et aussi le déverrouiller à l'aide de mot de passe, comme l'a fait ci-dessus.
OriginalL'auteur JavaTweets | 2014-11-04
Vous devez vous connecter pour publier un commentaire.
Fondamentalement la ligne suivante de code ne fonctionne pas pour Office 2007+ documents XML:
De sorte que vous aurez d'abord besoin de vérifier l'en-tête dans le flux d'entrée de savoir si c'est pris en charge par l'appel de cette:
et seulement décryptage si le ci-dessus renvoie la valeur true. Le
hasPOIFSHeader
méthode nécessite un flux d'entrée qui prend en charge la marque/reset, afin de vérifier que le bien et l'envelopper dans unPushbackInputStream
si ce n'.Mettre tous ensemble devient alors quelque chose comme ceci:
OriginalL'auteur jmn
Ci-dessous vieux Débordement de Pile réponse peut-être vous aider à sortir de ce.
La lecture de jeux de propriétés à partir d'Office 2007+ documents avec java poi
La classe que vous aurez envie est POIXMLProperties, quelque chose comme:
De POIXMLProperties vous pouvez obtenir l'accès à toutes les propriétés, et la coutume trop!
OriginalL'auteur Shishir Kumar