Ungültiger header Lesen xls-Datei
Ich lese eine excel-Datei auf meinem lokalen system. Ich bin mit POI-jar Version 3.7, aber immer Fehler Ungültige header-Signatur;
Lesen -2300849302551019537 oder in Hex 0xE011BDBFEFBDBFEF ,
erwartet -2226271756974174256 oder in Hex 0xE11AB1A1E011CFD0.
Öffnen Sie die xls-Datei mit Excel funktioniert.
Codeblock, wo es passiert:
Jemand eine Idee ?
/**
* create a new HeaderBlockReader from an InputStream
*
* @param stream the source InputStream
*
* @exception IOException on errors or bad data
*/
public HeaderBlockReader(InputStream stream) throws IOException {
//At this point, we don't know how big our
// block sizes are
//So, read the first 32 bytes to check, then
// read the rest of the block
byte[] blockStart = new byte[32];
int bsCount = IOUtils.readFully(stream, blockStart);
if(bsCount != 32) {
throw alertShortRead(bsCount, 32);
}
//verify signature
long signature = LittleEndian.getLong(blockStart, _signature_offset);
if (signature != _signature) {
//Is it one of the usual suspects?
byte[] OOXML_FILE_HEADER = POIFSConstants.OOXML_FILE_HEADER;
if(blockStart[0] == OOXML_FILE_HEADER[0] &&
blockStart[1] == OOXML_FILE_HEADER[1] &&
blockStart[2] == OOXML_FILE_HEADER[2] &&
blockStart[3] == OOXML_FILE_HEADER[3]) {
throw new 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)");
}
if ((signature & 0xFF8FFFFFFFFFFFFFL) == 0x0010000200040009L) {
//BIFF2 raw stream starts with BOF (sid=0x0009, size=0x0004, data=0x00t0)
throw new IllegalArgumentException("The supplied data appears to be in BIFF2 format. "
+ "POI only supports BIFF8 format");
}
//Give a generic error
throw new IOException("Invalid header signature; read "
+ longToHex(signature) + ", expected "
+ longToHex(_signature));
}
- Sie sind das werfen dieser Ausnahme aus dem code? throw new IOException? verwirrt durch Ihre Frage, die Sie sich werfen Sie die Ausnahme, und Sie Fragen, warum?
- Die Exception geworfen wird, die von der Apache Poi Bibliothek und oben ist der code, die es wirft.
- apache poi ist nicht werfen Sie den Fehler, dein code funktioniert throw new IOException("Invalid header-Signatur; Lesen"
- Die HeaderBlockReader(InputStream stream) Konstruktor ist Teil der Apache POI Bibliothek. Mein code wird die vorhandene xls-Datei als stream und dann möchte ich eine neue erstellen POIFileSystem mit dieser InputStream.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur eine idee, wenn du mit maven stellen Sie sicher, dass in der Ressource-tag-Filterung ist auf false gesetzt.
Ansonsten maven tendenziell korrupten xls-Dateien in das kopieren von phase
Diese Ausnahme sagt Sie, dass Ihre Datei ist keine gültige OLE2-basiert .xls-Datei.
Lage, um die Datei in Excel öffnen, ist kein echtes Handbuch - Excel wird gerne öffnen Sie eine beliebige Datei, die es kennt, egal was sich die Erweiterung auf es. Wenn Sie eine .csv-Datei und benennen Sie es um .xls, Excel wird noch geöffnet, aber die Umbenennung ist noch nicht magisch machte es in der .xls-format, so dass der POI sich nicht öffnen es für Sie.
Wenn Sie öffnen die Datei in Excel und Speichere-Da, so lasse Sie schreiben es aus, wie eine echte Excel-Datei. Wenn Sie wissen möchten, welche Datei es wirklich ist, versuchen Sie es mit Apache Tika - Tika-CLI
--detect
sollte in der Lage sein, Ihnen zu sagen.
Wie kann ich sicher sein, dass es nicht um eine gültige Datei? Wenn man sich die OLE2-Datei-format-Spezifikation, doc von Microsoft, und den Kopf auf Abschnitt 2.2, sehen Sie das folgende:
Flip diese bytes-Runde (OLE2 little endian) und Sie bekommen 0xE11AB1A1E011CFD0, die Magische Zahl von Ausnahme. Deine Datei beginnt nicht mit, dass die Magische Zahl, denn so ist wirklich nicht eine gültige OLE2-Dokument, und somit als POI gibt Sie, die Ausnahme.
Wenn Ihr Projekt maven-Projekt der folgende code helfen: