카테고리 없음

[JSP] 순수 JSP Poi 이용 엑셀업로드 기능 구현 도중 에러 정리 xls, xlsx

월공 2021. 6. 23. 08:07
728x90
300x250

엑셀 업로드 기능은 우선 엑셀 파일을 그대로 서버에 업로드한 뒤에 읽어오는 형식입니다.

업로드 과정부터 세세하게 포스팅 하진 않을거고, 발생하였던 에러에 관해서만 간단하게 요약하려고 합니다.

 

우선 xls 와 xlsx 차이는 버전이고, 2003 , 2007 뭐 이렇습니다.

문제점은 xls 파일은 잘만 올라가는데 xlsx 는 자꾸 올라가지않고 에러가 뜨는 경우가 있어서 에러 분석후에

결국 jar 파일이 문제였다는걸 확인후에 jar 파일 대체후 정상가동 확인할수 있었습니다.

 

2003 xls 일때 JSP 소스

<%@page import="org.apache.poi.hssf.usermodel.*" %>

... 생략

#xlsFile은 업로드된 엑셀파일의 절대경로

HSSFWorkbook workbook = new HSSFWorkbook(xlsFile);    
Sheet sheet = workbook.getSheetAt(0);

int xlsRows = sheet.getPhysicalNumberOfRows();

for(int rownum=1 ; rownum < xlsRows; rownum++){
  Row xlsRow = sheet.getRow(rownum);                
  out.println(xlsRow.getCell(0).toString() + "<br>");
}

2007 xlsx 일때 JSP 소스

<%@page import="org.apache.poi.xssf.usermodel.*"%>

... 생략 ...

XSSFWorkbook workbook = new XSSFWorkbook(xlsFile);
Sheet sheet = workbook.getSheetAt(0);            
int xlsRows = sheet.getPhysicalNumberOfRows();                
for(int rownum=1 ; rownum < xlsRows; rownum++){
  Row xlsRow = sheet.getRow(rownum);                
  out.println(xlsRow.getCell(0).toString() + "<br>");
}

사실 첫줄에 XSSF 냐 HSSF 냐만 다르지 나머지는 동일합니다

받아오는 페이지에서 확장자로 if else 돌려서 가동해도 무방할듯 하네요.

 

 

/usr/local/tomcat/shared/lib 안에 아래와 같은 jar 파일들을 사용하였으며 문제가 되었던 jar 파일이 바로 

xmlbeans-5.1.6.jar 였습니다.

 

* 아래 jar 파일들은 모두 정상가동되는 파일들입니다.

poi-3.9.jar
1.78MB
poi-ooxml-3.9.jar
0.89MB
poi-ooxml-schemas-3.9.jar
4.58MB
xmlbeans-5.1.6.jar
2.61MB

 

2003 버전 읽어오는 HSSF 는 poi-3.9.jar 안에 있으며,

2007 을 읽어올수있는 XSSF 는 poi-ooxml-3.9.jar 안에 있었는데 ooxml jar 파일 안에 XSSFWorkbook.class 를 까보니

xmlbeans 어쩌고가 import 되있길래 혹시나 싶어서 xmlbeans 를 열어봤더니 손상된 파일이라며 열리지 않았습니다.

poi-ooxml-3.9.jar // org.apache.poi.xssf.usermodel ....

 

그래서 새롭게 xmlbeans 5.1.6 새 파일을 다운받아 서버에 업로드 시킨 후에 톰캣서버를 재시작하니 정상적으로 가동이 되는것을 확인하였습니다.

 

문제였던 jar 파일이 용량도 좀 더 작더군요. 왜 jar 파일이 손상되는진 이해가 되지않는다만 ..

여튼 삽질후에 해결해서 다행입니다.

728x90
300x250