JAVA / JSP에서 Excel을 다루는 방법이 몇 가지 존재한다.
그 중, 내가 사용해 본 것은
JExcelAPI (jxl.jar. 참고: http://www.andykhan.com/jexcelapi/tutorial.html#reading)
와
Jakarta POI (참고: http://jakarta.apache.org/poi)
이다.
이 통에 이 두가지를 사용하는 방법에 대한 이야기를 올리기 보다는,
사용하다 부딪힌 문제 및 나름대로의 해결 방법을 적어볼란다.
JExcelAPI를 사용하다보면 종종 만나는 Exception은 다음과 같다.
jxl.read.biff.BiffException: Unable to recognize OLE stream
jxl.read.biff.BiffException: The input file was not found
재미있는 것은 실제로 엑셀파일이 서버에 올라가 있음에도 불구하고
jxl.read.biff.BiffException: The input file was not found
이런 Exception이 뜬다는 것이다. O.o
POI 경우 만나는 Exception은 다음과 같다.
java.io.IOException: Invalid header signature; read 3255307777713441293, expected -2226271756974174256
at org.apache.poi.poifs.storage.HeaderBlockReader.<init>(HeaderBlockReader.java:124)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:120)
Upload Component의 문제일까? (필자의 경우 ActiveX 컴포넌트가 아닌 일반적인 자바 네트웍 프로그램을 사용함)
엑셀 버전에 따르는 문제일까?
별의별 가능성에 따라 테스트를 해보았다.
결국 알아낸 문제점의 원인은... 짠짜란~~(이거 때문에 1주일 고생했다. ㅠㅠ)
UI 페이지에서 <input type="file" ...> 객체를 기술 할 때 감싸는 폼 (
<form target="i_attExcel" name="ATTREAL" enctype="multipart/form-data" method="post">
...
...
</form>
)
안에서 폼 객체(<select>, <input> ...)를 기술 할 때 반드시 <input type="file"...> 요놈 하나만
있어야 한다.
다른 폼 객체가 같이 있어도 업로드는 잘 되지만
업로드 시, 파일의 header에 HTML에 관련된 정보가 자동으로 붙음으로써
문제가 일어났던 것이다. (맞나~ ㅡㅡ;)
그래서 암만 확장자가 xls인 파일이 서버쪽에 올라간다 하더라도
jxl 방식으로 읽어들일 때, 인식할 수 없는 엑셀 파일 형식이라
jxl.read.biff.BiffException: Unable to recognize OLE stream
요런 Exception이 나왔던 것이고,
POI 방식ㅇ로 읽어들일 때도 파일의 header 정보가 알 수 없는 엑셀 파일 형식이라
java.io.IOException: Invalid header signature
요런 Exception이 나왔던 것이다.
휴~ 이 상쾌함~ ㅋㅋ
다음부터는 이런 실수 안하도록 해야지...^^;;
출처 : Tong - robertj님의 Web Programing통
[출처] JSP Excel 다루기|작성자 우마니

Prev
Rss Feed