728x90
반응형
2021.07.03
48번째 포스팅
입사 117일차.
이제 jsp로 전달한 엑셀파일과 파일명을 사용해서 엑셀파일을 읽어올 수 있다.
파일을 업로드하는 코드는 다른 블로그에 더 자세하고 잘 설명되어있으니 엑셀파일을 읽는 코드만 작성해보려고 한다.
1. import
① 외부 jar파일로 등록한 poi.jar를 사용하기 위해서는 import 코드를 작성해야한다.
② 4개의 객체에 대한 import가 필요하다.
객체명 | 기능 | import 코드 |
XSSFWorkbook | 입력한 경로를 통해 가져온 엑셀파일의 정보를 받는다 | org.apache.poi.xssf.usermodel.XSSFWorkbook |
XSSFSheet | 엑셀파일의 시트에 대한 정보를 받는다 | org.apache.poi.xssf.usermodel.XSSFSheet |
XSSFRow | 선택한 시트의 행에 입력한 데이터를 받는다 | org.apache.poi.xssf.usermodel.XSSFRow |
XSSFCell | 선택한 시트의 열에 입력한 데이터를 받는다 | org.apache.poi.xssf.usermodel.XSSFCell |
③ 완성한 jsp파일
업로드한 파일을 삭제해주는 코드를 넣어주면 더 좋은 코드가 될 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
<%
// 파일을 업로드한 경로\파일명 의 경로를 설정 후, justFileName에 담긴 파일명을 붙여서 경로완성!
String filePath = "C:\\업로드경로\\" + request.getParameter("justFileName");
try {
// FileInputStream을 이용해서 완성한 파일경로에 있는 파일의 정보를 받는다
FileInputStream excelFile = new FileInputStream(new File(filePath));
// XSSFWorkbook 객체를 이용해서 엑셀파일의 정보를 읽어들인다
XSSFWorkbook workbook = new XSSFWorkbook(excelFile);
// XSSFSheet 객체를 이용해서 시트의 정보를 읽어들인다 (getSheetAt(번호), 0 = 맨 첫번째 시트)
XSSFSheet sheet = workbook.getSheetAt(0);
// getPhysicalNumberOfRows(); 메소드를 사용해서 데이터가 있는 마지막 행의 번호를 받는다
int rowEnd = sheet.getPhysicalNumberOfRows();
// 읽어들이고 싶은 행의 번호는 '읽어들이고 싶은 행 - 1'로 설정 ( 0은 첫번째줄부터 ~ )
for ( int i = 0; i <= rowEnd; i++) {
// 차례대로 한줄씩 데이터를 읽어들인다
XSSFRow row = sheet.getRow(i);
// 반복문을 통해 선택된 row에 데이터가 있으면
if ( row != null ) {
// getPhysicalNumberOfCells(); 메소드를 사용해서 데이터가 있는 마지막 cell의 열 번호를 받는다
int cellEnd = row.getPhysicalNumberOfCells();
// 읽어들이고 싶은 cell의 열번호는 '읽어들이고 싶은 열번호 - 1'로 설정
for ( int j = 0; j <= cellEnd; j++) {
// 차례대로 하나의 셀씩 데이터를 읽어들인다
XSSFCell cell = row.getCell(columnindex);
// 읽어들인 데이터는 자료형에 맞게 출력하는 메소드가 다르다
String value = "";
if ( cell == null) continue;
else {
switch( cell.getCellType() ) {
case XSSFCell.CELL_TYPE_FORMULA:
value = cell.getCellFormula();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
value = cell.getNumericCellValue() + "";
break;
case XSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue() + "";
break;
case XSSFCell.CELL_TYPE_BLANK:
value = cell.getBooleanCellValue() + "";
break;
case XSSFCell.CELL_TYPE_ERROR:
value = cell.getErrorCellValue() + "";
break;
}
}
// DB에 VO형태로 cell번호를 구분하여 Setter메소드를 사용해서 값을 받는다
if( j == 0 ) tableVO.setColumn1(value);
if( j == 1 ) tableVO.setColumn2(value);
if( j == 2 ) tableVO.setColumn3(value);
if( j == 3 ) tableVO.setColumn4(value);
}
// VO형태로 받은 데이터를 DB에 저장하는 클래스의 메소드와 연결한다
MyBatisMapper.setExcelData();
}
}
} catch ( Exception e ) {
e.printStackTrace();
}
%>
|
cs |
④ catch에서 에러를 잡아내지 않았다면 위의 코드가 정상적으로 실행되었다.
정상적으로 실행이 되었다면 DB를 열어 정상적으로 데이터가 입력되었는지 확인해보자.
728x90
반응형
'백엔드 > 자바' 카테고리의 다른 글
[BE/JAVA] 소켓통신 (예제코드 포함) (0) | 2022.02.02 |
---|---|
[BE/JAVA] HashMap clear() vs new HashMap<>() (0) | 2021.12.26 |
[BE/JAVA] JSP에서 엑셀파일 읽어서 DB에 저장하기 - 2 (0) | 2021.07.01 |
[BE/JAVA] JSP에서 엑셀파일 읽어서 DB에 저장하기 - 1 (0) | 2021.06.30 |
[BE/JAVA] getter, setter Object vs parsing 속도비교 (0) | 2021.06.09 |
댓글