알고리즘/JAVA

Java 에서 Excel 값 불러오기

야아옹 2015. 12. 15. 23:52

자바 에서 엑셀을 불러 읽어오는 것은 큰 어려움은 없지만 값들을 하나씩 읽어 오는 코딩입니다.

Excel 자료는 서울시의 싱크홀의 좌표 로 X좌표와 Y의 좌표가 있으며 여기서는 X의 좌표만 가져오는 코딩을 게시합니다.

-DB

SinkHole.xlsx

-jar파일

 

poi.zip

 

-주요클래스

1. ExcelToReadx.java

poi.jar를 추가하고 엑셀의 값을 읽고 값들을 DTO에 값을 보냅니다.

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
package sinkhole;
 
import java.io.FileInputStream;
import java.util.ArrayList;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
public class ExcelToReadx {
 
    public static void main(String[] args) {
        
        try {
 
            new ExcelToReadx().stratx();
            
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public String stratx() {
        XSSFRow row;
        XSSFCell cell;
        String x = null;
        try {
            FileInputStream inputStream = new FileInputStream("D:\\SinkHole.xlsx");
            XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
            int sheetCn = workbook.getNumberOfSheets();
 
            for (int cn = 0; cn < sheetCn; cn++) {
 
                XSSFSheet sheet = workbook.getSheetAt(cn);
 
                int rows = sheet.getPhysicalNumberOfRows();
 
 
                for (int r = 0; r < rows; r++) {
                    row = sheet.getRow(r); 
                    if (row != null) {
                        ArrayList<SinkholeDTO> list = new ArrayList<SinkholeDTO>();
                        for (int c = 0; c < 1; c++) {
                            cell = row.getCell(c);
                            if (cell != null) {
                                String value = null;
 
                                switch (cell.getCellType()) {
 
                                case XSSFCell.CELL_TYPE_NUMERIC:
 
                                    value = "" + cell.getNumericCellValue();
                                    SinkholeDTO shdto = new SinkholeDTO();
 
                                    shdto.setX(value);
                                    list.add(shdto);
                                    break;
                        
                                }
                            }
                        }
                         Locationprintx lp = new Locationprintx(); 
                         lp.printx();
                        
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return x;
    }
 
    
}
cs

2. Locationprintx.java

DTO 에 set으로 저장된 x좌표의 값들을 get으로 얻고 이를 출력하는 클래스입니다.

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
 
package sinkhole;
 
public class Locationprintx {
 
    public static void main(String[] args) {
        try {
 
            new Locationprintx().printx();
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
    public String printx() {
        String x = null;
 
        SinkholeDTO shdto = new SinkholeDTO();
 
        x = shdto.getX(x);
 
        System.out.println(x);
        return x;
 
    }
 
}
 
 
cs

 

3. SinkholeDTO.java

이클립스에서 자동완성기능인 Getter, Setter 기능을 사용하면 빨리 생성됩니다.

DTO(Data Transfer object) : 프로세스 사이에서 데이터를 전송하는 객체를 의미합니다.

사용이유 : 프로세스 간의 커뮤니케이션이 주로 개별 호출이 부담스러운 작업일 경우가 많은 원격 인터페이스(예: 웹 서비스)에 의해 이루어지기 때문이다.

스스로의 데이터를 저장 및 회수하는 기능을 제외한 아무기능을 갖지않습니다.

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
 
package sinkhole;
 
public class SinkholeDTO {
 
private static String X;
private static String Y;
 
 
 
public String getX(String x) {
    return X;
}
 
public static void setX(String x) {
    X = x;
}
 
public String getY(String y) {
    return Y;
}
 
public static void setY(String y) {
    Y = y;
}
 
 
 
    
 
 
cs