Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

유령노트

엑셀 파일 업로드 (Excel File Upload) 본문

# Dev

엑셀 파일 업로드 (Excel File Upload)

유령손 2020. 7. 17. 11:45

엑셀 내용 예제1)

test1 test2 test3 test4 test5 test6 test7 test8 test9
값1 값2 값3 값4 값5 값6 값7 값8 값9

 

엑셀 내용 예제2)

test5 test4 test7 test8 test1 test6 test3 test9 test2
값5 값4 값7 값8 값1 값6 값3 값9 값2

엑셀 파일 헤더부분이 컬럼 명과 일치 시킬 경우 순서 상관없이 입력 가능

 

DummyMapper.java

1
2
  MultipartHttpServletRequest multiRequest 사용
  dummyService.excelReader(multiRequest);
cs

DummyService.java

1
  public void excelReader(MultipartHttpServletRequest mreq) throws Exception;
cs

DummyServiceImpl.java

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
      /*************************
        * 엑셀 파일 읽기
        *************************/
    public void excelReader(MultipartHttpServletRequest mreq) throws Exception {
        
        //쿼리로 보낼 정보 맵
        HashMap<String, Object> map = new HashMap<String, Object> ();
 
        // 읽어들인 엑셀 데이터 리스트
        ArrayList<HashMap<String, Object>> excelDataList = new ArrayList<HashMap<String, Object>>();
 
        //파일 가져오기
        //업로드 이름(HTML from file name)
        MultipartFile file = mreq.getFile("FileNameForm");
        
        /***********
         * 파일 확인 S
         ***********/
        if(!file.isEmpty())
        {
        
            try {
                
                Workbook workbook = null;
                workbook = WorkbookFactory.create(file.getInputStream());
                
                int sheetCnt = workbook.getNumberOfSheets();
                
                /**********************
                 * 여러 시트일 경우 시트 반복 S
                 **********************/
                for(int sheetNum = 0; sheetNum < sheetCnt; sheetNum++)
                {
                    // 셀별 컬럼 리스트 저장용
                    ArrayList<String> cellList = new ArrayList<String>();
                    
                    // 현재 시트 변수
                    Sheet sheet = workbook.getSheetAt(sheetNum);
                    
                    //행 개수
                    int rows = sheet.getPhysicalNumberOfRows();
                    
                    //헤더 셀 개수 확인 헤더는 0으로 고정
                    int cells = sheet.getRow(0).getPhysicalNumberOfCells();
                    
                    /*************
                     * row 별 반복 S
                     *************/
                    for(int i = 0; i < rows; i++)
                    {
                        // 엑셀 row당 데이터
                        HashMap<String, Object> excelData = new HashMap<String, Object>();
                        
                        //해당 row 가져오기
                        Row row = sheet.getRow(i);
                        
                        /*************
                         * 빈 row 확인 S
                         *************/
                        if(row != null)
                        {
                            /**************
                             * cell 별 반복 S
                             **************/
                            for(int j = 0; j < cells; j++)
                            {
                                //cell 변수
                                Cell cell = row.getCell(j);
                                
                                //엑셀 변수 값
                                String value = null;
    
                                /********************
                                 * cell null check S
                                 ********************/
                                if(cell != null)
                                {
                                    /******************
                                     * cellType 별 기능 S
                                     ******************/
                                    switch(cell.getCellTypeEnum())
                                    {
                                        //    CellType 확인
                                        //공식 타입일 경우
                                        case FORMULA :
                                            value = cell.getCellFormula();
                                            break;
                                            
                                        //숫자 타입일 경우
                                        case NUMERIC :
                                            // 숫자가 날짜 타입인지  확인
                                            if(DateUtil.isCellDateFormatted(cell))
                                            {
                                                   // 날짜 포맷 정의
                                                   SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                                                value =  fmt.format(cell.getDateCellValue());
                                            }
                                            // 일반 숫자 타입
                                            else
                                            {
                                                Double numValue = cell.getNumericCellValue(); 
                                                value = Double.toString(numValue);
                                            }
                                            break;
                                            
                                        //String 형일 경우
                                        case STRING :
                                            value = cell.getStringCellValue();
                                            break;
                                            
                                        //공백일 경우
                                        case BLANK :
                                            value = "";
                                            break;
                                            
                                        //에러 일 경우
                                        case ERROR :
                                            //byte 형으로 반환되기에 string으로 변환
                                            value = "" + cell.getErrorCellValue();
                                            break;
                                        default:
                                    }
                                    /******************
                                     * cellType 별 기능 E
                                     ******************/
                                }
                                //cell이 null일 경우
                                else
                                {
                                    System.out.println("Cell is null");
                                }
                                /********************
                                 * cell null check E
                                 ********************/
                                
                                /********************************
                                 * 데이터 컬럼 등록 작업 및 데이터 삽입 영역 S
                                 ********************************/
                                //데이터 컬럼 등록
                                if(i == 0)
                                {
                                    cellList.add(value);
                                }
                                //데이터 컬럼, 값 삽입
                                else
                                {
                                    excelData.put(cellList.get(j), value);
                                }
                                /********************************
                                 * 데이터 컬럼 등록 작업 및 데이터 삽입 영역 E
                                 ********************************/
                            }
                            /**************
                             * cell 별 반복 E
                             **************/
                            //데이터 확인
                            if(!excelData.isEmpty())
                            {
                                //데이터 리스트에 삽입
                                excelDataList.add(excelData);
                            }
                        }
                        /*************
                         * 빈 row 확인 E
                         *************/
                    }
                    /*************
                     * row 별 반복 E
                     *************/
                }
                /**********************
                 * 여러 시트일 경우 시트 반복 E
                 **********************/
                
                
            }
            catch (Exception e) {
                System.out.println(e);
            }
        }
        /***********
         * 파일 확인 E
         ***********/
        map.put("excelDataList", excelDataList);
        
        dummyDAO.setExcelDataInsert(map);
    }
cs

DummyMapper.java

1
  public void setExcelDataInsert(HashMap<String, Object> map) throws Exception;
cs

SQL 문

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
      <!-- 데이터 등록 -->
    <insert id="setExcelDataInsert">
        <![CDATA[
            INSERT INTO DUMMY
            (
                    TEST1
                ,    TEST2
                ,    TEST3
                ,    TEST4
                ,    TEST5
                ,    TEST6
                ,    TEST7
                ,    TEST8
                ,    TEST9
            )
            VALUES
        ]]>
        <foreach collection="excelDataList" item="data" separator=",">
            <![CDATA[
            (
                    #{data.test1}
                ,    #{data.test2}
                ,    #{data.test3}
                ,    #{data.test4}
                ,    #{data.test5}
                ,    #{data.test6}
                ,    #{data.test7}
                ,    #{data.test8}
                ,    #{data.test9}
            )
            ]]>
        </foreach>
    </insert>
cs