source

헤더 서명이 잘못되었습니다. Excel 문서에 Apache POI가 있는 IO 예외

lovecheck 2023. 8. 25. 23:45
반응형

헤더 서명이 잘못되었습니다. Excel 문서에 Apache POI가 있는 IO 예외

다음과 같은 정보:

java.io .IO 예외:헤더 서명이 잘못되었습니다. 0x000201060000 참조FFE, 0xE11이 필요합니다.AB1A1E011CFD0

Apache POI HPSF를 사용하여 일부 사용자 정의 속성을 Excel 문서에 추가하려고 할 때.

저는 그 파일이 Excel OLE2(HTML, XML 또는 Excel이 불평하지 않는 다른 것이 아님)라고 완전히 확신합니다.

다음은 내 코드와 관련된 부분입니다.

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);
    }

워드 및 파워포인트 파일(OLE2)로 시도할 때 동일한 오류가 발생합니다.

저는 완전히 아이디어가 없어서 어떤 도움/포인터라도 감사합니다 :)

서명 번호를 뒤집으면 파일 시작 부분의 바이트가 표시됩니다.

0x000201060000FFE -> 0xFE 0xFF 0x000x0000x06 0x0100x0200

처음 두 바이트는 유니코드 BOM처럼 보이며, 0xFEFF는 16비트 작은 엔디안을 의미합니다.그러면 낮은 제어 바이트, 즉 0, 258, 2의 16진수 코드가 있으므로 텍스트 파일이 아닐 수도 있습니다.

해당 파일은 OLE2 파일이 아니며 POI가 오류를 제공하는 것이 맞습니다.뭔지는 모르겠지만, 아마도 외부 OLE2 래퍼가 없는 OLE2 파일의 일부일 것이라고 생각합니다.사무실에서 열 수 있다면 저장을 하고 POI로 열어도 괜찮을 것입니다.현재 상태로는 해당 헤더가 OLE2 파일 헤더가 아니므로 POI에서 열 수 없습니다.

제 경우, 파일은 CSV 파일로 저장되었습니다..xls연장의엑셀은 문제없이 열 수 있었지만 POI는 그렇지 않았습니다.

더 나은/더 일반적인 해결책을 찾는다면, 다시 와서 여기에 작성하겠습니다.

직접 csv 파일로 저장하고 작업에 opencsv를 사용합니다.
opencsv에 대해 알아보려면 다음 링크를 사용하십시오.
http://opencsv.sourceforge.net/ #개방형 csv

Excel은 csv, xls 또는 xls로 저장된 html 테이블을 열 수 있습니다.

따라서 파일을 file_name.csv로 저장하고 opencsv를 사용하여 코드의 파일을 읽을 수 있습니다.

또는 엑셀 97-2003 워크북을 저장하여 엑셀에 파일을 한 번 저장할 수 있습니다.

그러면 POI 자체가 파일을 읽을 수 있습니다 :-)

Excel 2013에 파일을 저장했기 때문입니다. 파일을 Excel 97-2003 형식으로 저장합니다.

소프트웨어에서 생성된 xls 파일에도 동일한 문제가 있었습니다. Apache POI로 읽을 수 있도록 엑셀(동일한 형식)로 파일을 저장해야 합니다.

.xls 대신 .xlsx 파일을 사용하고 있었습니다.워크북, Sheet, Row 클래스를 사용하는 경우에는 .xls 파일을 사용해야 합니다.제 파일은 .xlsx로, 이 문제를 일으켰고 저는 .xls로 바꿨습니다. 작동했습니다.

언급URL : https://stackoverflow.com/questions/3677925/invalid-header-signature-ioexception-with-apache-poi-on-excel-document

반응형