2009/05/07 10:38

JSP Excel 다루기


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통

Trackback 0 Comment 0