반응형

from http://www.javaservice.net/~java/bbs/read.cgi?m=resource&b=qna2&c=r_p&n=1131692449&p=1&s=t

 

제목 : POI로 엑셀파일 읽을때, Invalid header signature 에러
글쓴이: 손님(guest) 2005/11/11 11:37:30 조회수:20 줄수:44
poi를 이용하여 클라이언트의 엑셀문서를 서버에 업로드후 읽어내는 작업을 하려합니다.
작업의 목적은 화면상에 입력필드가 너무 많아서(대략 240여개 정도 됩니다),
일일이 입력하기에 불편함이 초래되어,엑셀로 다운받은 다음에 해당 입력값들을 엑셀에서 입력후,
입력한 값을 다시 화면상에 뿌려주려는 것입니다.

업로드 완료후 엑셀파일을 읽을때,

Error occurred : Invalid header signature; read 5789751444030890300, expected -2226271756974174256
java.io.IOException: Invalid header signature; read 5789751444030890300, expected -2226271756974174256
        at org.apache.poi.poifs.storage.HeaderBlockReader.<init>(HeaderBlockReader.java:88)
        at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:83).......

 

위와 같은 에러가 발생합니다.해당 라인을 쫓아가보면,

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath + fileName));

이부분입니다.

읽으려 하는 엑셀은 jsp내에서,

response.setContentType("application/vnd.ms-excel;charset=euc-kr"); 
response.setHeader("Content-Disposition", "attachment; filename="+jspName+".xls"); 
response.setHeader("Content-Description", "JSP Generated Data"); 

을 이용해서 생성한것입니다.해당 엑셀파일을 일반 텍스트 에디터에서 열어보면,

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=ks_c_5601-1987">
<meta name=ProgId content=Excel.Sheet>
(이하 생략)

meta 태그내의 'content="text/html;' 부분이 의심이 갑니다만.
엑셀을 생성하는 jsp내의 meta 태그부분을 삭제해도,생성된 엑셀을 보면 해당부분이 들어가있는데요.

다시 처음으로 와서,content='text/html' 부분때문에 Invalid header signature...의 오류가 발생하는것인지요?
jsp에서 생성된 엑셀이 아닌 일반 엑셀문서로 테스트 해봤을때는 이상없이 제대로 실행됩니다.
제가 의심한 부분이 맞는것이라면, 해결책은 어떤것이 있을런지 조언 부탁드립니다.
제목 : Re: 실제 엑셀파일이 아니라서 그런거 같습니다.
글쓴이: 손님(guest) 2005/11/11 16:00:49 조회수:7 줄수:16
 Invalid Header라는 에러메시지의 의미가

 파일 헤더가 엑셀타입이 아니라서 그런거 같습니다.

 POI가 해석하는 엑셀파일은 MS OLE Compound로 생성된 파일포맷일 경우에만

 해당됩니다..html의 header를 excel이라 조작해서 생성된 엑셀파일은

 실제론 텍스트파일일뿐 OLE 타입이 아니라서요.

 서버에서 생성시 jsp로 생성하지 말고 poi를 이용해서 서버측에 실제

 엑셀파일을 생성한 후 클라이언트로 스트리밍을 통해 다운로드 해주는 방식을

 택해야할 것같네요.
제목 : Re: 답변 고맙습니다.
글쓴이: 손님(guest) 2005/11/11 16:31:58 조회수:2 줄수:5
그렇군요.
실제로 jsp내에서 생성되는 엑셀을 다른이름으로 저장해서 'Micrisoft Excel 통합문서' 형식으로 저장하니,
정상적으로 실행이 되는군요.
충고해주신데로, poi를 이용해서 엑셀을 생성하는 쪽으로 다시 해봐야겠습니다.
답변 고맙습니다.좋은 주말 되세요.

Posted by 1010