Signature d'en-tête invalide; IOException avec Apache POI sur un document Excel
J'obtiens:
java.io.IOException: en-tête non Valide signature; lire
0x000201060000FFFE, devrait 0xE11AB1A1E011CFD0
lorsque vous essayez d'ajouter quelques propriétés personnalisées d'un document Excel à l'aide d'apache POI HPSF.
Je suis sûr que le fichier est Excel OLE2 (pas en HTML, XML ou autre chose qu'Excel n'est pas se plaindre).
C'est une partie de mon code:
try {
final POIFSFileSystem poifs = new POIFSFileSystem(event.getStream());
final DirectoryEntry dir = poifs.getRoot();
final DocumentEntry dsiEntry = (DocumentEntry)
dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
final DocumentInputStream dis = new DocumentInputStream(dsiEntry);
final PropertySet props = new PropertySet(dis);
dis.close();
dsi = new DocumentSummaryInformation(props);
}
catch (Exception ex) {
throw new RuntimeException
("Cannot create POI SummaryInformation for event: " + event +
", path:" + event.getPath() +
", name:" + event.getPath() +
", cause:" + ex);
}
Je reçois le même message d'erreur lorsque vous essayez avec word et power point fichiers (également OLE2).
Je suis complètement à court d'idées de sorte que toute aide/les pointeurs sont très appréciés 🙂
source d'informationauteur Simeon
Vous devez vous connecter pour publier un commentaire.
Si vous retournez la signature numéro de ronde, vous verrez les octets du début de votre fichier:
0x000201060000FFFE -> 0xFE 0xFF, 0x00 0x00 0x06 0x01 0x02 00
Les deux premiers octets de ressembler à une Unicode BOM, 0xFEFF signifie que 16 bits little endian. Vous avez alors un peu de bas octets de contrôle, les codes hexadécimaux pour 0 alors 258 puis 2, donc peut-être que ce n'est pas un fichier texte, après tout.
Que le fichier n'est pas un fichier OLE2, et PI est juste pour vous donner l'erreur. Je ne sais pas ce que c'est, mais je suppose que peut-être il pourrait être une partie d'un fichier OLE2 sans extérieur OLE2 wrapper? Si vous pouvez l'ouvrir avec office, enregistrer-sous et PI devrait être bon pour l'ouvrir. Comme il est, cet en-tête n'est pas un OLE2 fichier d'en-tête afin de PI ne peut pas l'ouvrir pour vous.
Dans mon cas, le fichier est un fichier CSV enregistré avec le
.xls
extension. Excel a été en mesure de l'ouvrir sans problème, mais POI ne l'était pas.Si je trouve une meilleure/plus générale de la solution, je reviens écrire ici.
Essayer de l'enregistrer en tant que fichier csv directement et d'utiliser opencsv pour vos opérations.
Utilisez le lien suivant pour connaître opencsv.
http://opencsv.sourceforge.net/#what-is-opencsv
Excel peut ouvrir un fichier csv, xls ou html table enregistré comme xls.
De sorte que vous pouvez enregistrer le fichier nom_fichier.csv et peut utiliser opencsv pour lire le fichier dans votre code.
Ou autre chose que vous pouvez une fois le fichier dans microsoft excel à l'enregistrer en tant Que classeur excel 97-2003.
Et puis, PI lui-même pouvez lire le fichier 🙂
J'ai eu le même problème avec un fichier xls généré par le logiciel, je suis obligé d'enregistrer des fichiers avec Excel (même format) pour être en mesure de lire avec apache POI.
parce que vous avez enregistré votre fichier Excel 2013. enregistrez votre fichier sous format excel 97-2003.