엑셀 업로드 기능은 우선 엑셀 파일을 그대로 서버에 업로드한 뒤에 읽어오는 형식입니다.
업로드 과정부터 세세하게 포스팅 하진 않을거고, 발생하였던 에러에 관해서만 간단하게 요약하려고 합니다.
우선 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 파일들은 모두 정상가동되는 파일들입니다.
2003 버전 읽어오는 HSSF 는 poi-3.9.jar 안에 있으며,
2007 을 읽어올수있는 XSSF 는 poi-ooxml-3.9.jar 안에 있었는데 ooxml jar 파일 안에 XSSFWorkbook.class 를 까보니
xmlbeans 어쩌고가 import 되있길래 혹시나 싶어서 xmlbeans 를 열어봤더니 손상된 파일이라며 열리지 않았습니다.
그래서 새롭게 xmlbeans 5.1.6 새 파일을 다운받아 서버에 업로드 시킨 후에 톰캣서버를 재시작하니 정상적으로 가동이 되는것을 확인하였습니다.
문제였던 jar 파일이 용량도 좀 더 작더군요. 왜 jar 파일이 손상되는진 이해가 되지않는다만 ..
여튼 삽질후에 해결해서 다행입니다.