2013-04-25 19 views
8

내가 Excel 파일 (.XLS 형식)를 읽고 있어요 때, 나는 예외 점점 계속 :java.lang.IllegalArgumentException가 : 귀하의 InputStream는 OLE2 스트림,도 아니다 OOXML 스트림도했다

java.lang.IllegalArgumentException: Your Input Stream was neither an OLE 2 stream, nor an OOXML stream. 

I 이동 -을 ogled 그리고 입력 스트림이 리셋이나 마크를 지원하지 않는다면, 나는 pushbackStream으로 감싸 야한다고 발견했다. 입력 스트림이 표시되지 않고 \ 재설정 지원됩니다.

따라서 pushbackStream을 사용하는 유일한 방법은 무엇입니까? 사용 방법? 그리고 그것의 사용은 무엇입니까?

덕분에

+1

정말로 파일이 Excel .xls 파일입니까? 확장명이 변경된 .csv 또는 .html 파일이 아닌가요? – Gagravarr

+0

아니요, 해당 Excel .xls 파일입니다. – mee

+0

SSCCE를 제공하십시오. –

답변

4
Your InputStream was neither an OLE2 stream, nor an OOXML stream 
java.lang.IllegalArgumentException: Your InputStream was neither an OLE2 stream, nor an OOXML stream 

난 당신이 통합 문서 공장 또는 다른 형식의 입력 파일 및 다른 통합 문서 형식을 사용하는 것 같아요. 이 오류는 일반적으로 파일 형식을 읽을 수 없을 때 팝업됩니다. Apache POI는 파일 확장자를 검사하지 않습니다. 텍스트 편집기에서 열면 다른 형식으로 표시됩니다. 또는 Workbook Factory를 사용하기 전에 통합 문서 유형을 HSSF 또는 XSSF로 초기화 할 수 있습니다.

간단한 솔루션은 Microsoft Excel을 사용하여 파일을 열고 다른 파일로 저장 (파일을 사용하여> 마이크로 소프트 엑셀> 메뉴에서 옵션으로를 저장)하는 것입니다.

통합 문서 팩토리는 파일 확장명을 검사하지 않고 대신 파일 MIME 유형을 검사합니다. 기본적으로 다른 파일 (예 : 타사 응용 프로그램을 사용하여 만든 파일, 2003 버전의 파일)을 사용하여 작동하지만 Apache POI는 매우 구체적입니다.

PushbackInputStream은 다른 입력 스트림에 "푸시 백"또는 "읽지 않음"기능을 추가합니다. 현재 바이트를 해석하는 f}을 판별하기 전에, 앞으로 올 Y 른 몇 Y이트를 읽어 오는 것이 있는지 볼 수 있습니다.

워크 북 팩토리를 사용하지 않는 경우 PushbackInputStream이 유일한 대안입니다.

여기에서 코드를 공유 할 수 있다면 테스트하고 다시 확인할 수 있습니다.

+0

제안 사항이 도움이되지 않습니다. ( –

+0

오류에 대해 자세히 설명해 주시면 도와 드리겠습니다. –

+0

감사합니다. 당신,하지만 나는 그 문제를 기억하지 못합니다. 해결했습니다! :) –