프로그램 언어/Java

java 엑셀 파일 읽기 (xlsx)

husks 2019. 3. 8. 10:58
반응형


엑셀 파일을 읽어서 내용을 보여주는 소스 입니다.


xlsx 파일 기준으로 작성했습니다.


아래 엑셀 내용을 출력해 보겠습니다.




엑셀을 보여주기 위해 jar 파일이 필요합니다.


다른 소스를 보면 1개만 필요한것처럼 (poi.jar) 이야기 하던데...


제가 실제로 사용해 보니 4개가 필요했습니다.


아래 첨부파일에서 받을수 있습니다.


poi-3.11.jar

poi-ooxml-3.11.jar

poi-ooxml-schemas-3.11.jar

xmlbeans-2.6.0.jar

여기 말고 필요한 곳에서 받으시면 됩니다.


다만 버전을 맞춰서 받기를 추천합니다. 버전이 안 맞으니 실행이 안되더라고요. (저는 3.11 로 맞추었습니다.)


소스내용은 주석을 참고하세요.^^


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
package excel;
 
import java.io.FileInputStream;
 
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 ExcelRead {
 
    public static void main(String[] args) {
 
        try {
            FileInputStream file = new FileInputStream("D:/tmp/upload/right_excel/test.xlsx");
            XSSFWorkbook workbook = new XSSFWorkbook(file);
 
            int rowindex=0;
            int columnindex=0;
            //시트 수 (첫번째에만 존재하므로 0을 준다)
            //만약 각 시트를 읽기위해서는 FOR문을 한번더 돌려준다
            XSSFSheet sheet=workbook.getSheetAt(0);
            //행의 수
            int rows=sheet.getPhysicalNumberOfRows();
            for(rowindex=0;rowindex<rows;rowindex++){
                //행을읽는다
                XSSFRow row=sheet.getRow(rowindex);
                if(row !=null){
                    //셀의 수
                    int cells=row.getPhysicalNumberOfCells();
                    for(columnindex=0; columnindex<=cells; columnindex++){
                        //셀값을 읽는다
                        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;
                            }
                        }
                        System.out.println(rowindex+"번 행 : "+columnindex+"번 열 값은: "+value);
                    }
 
                }
            }
 
        }catch(Exception e) {
            e.printStackTrace();
        }
 
    }
 
}
 




출력한 결과는 다음과 같습니다.



엑셀 상단의 제목을 출력하기 싫으신 분은 

for(rowindex=0;rowindex<rows;rowindex++){   ====>    for(rowindex=1;rowindex<rows;rowindex++){ 


로 변경해 주세요.

반응형