(Kotlin) Poi를 사용하여 엑셀 데이터 가져오기(2)

지난 포스팅에서는,

 1)엑셀 파일을 불러와서 2)배열에 저장한 후 3)RecyclerView에 뿌려줄 계획 중 1), 2)까지 했습니다.

2019/08/06 - [안드로이드 개발/Kotlin으로 어플 만들기] - (Kotlin) Poi를 사용하여 엑셀 데이터 가져오기(1)

 

(Kotlin) Poi를 사용하여 엑셀 데이터 가져오기(1)

이 전 포스팅에서 RecyclerView까지 만들었는데 이어서 만들어보겠습니다. 2019/08/04 - [안드로이드 개발/Kotlin으로 어플 만들기] - (Kotlin) RecyclerView 사용하기 (Kotlin) RecyclerView 사용하기 1. Layout..

hamzzibari.tistory.com

오늘은 배열을 RecyclerView에 뿌려주는 것까지 해 보겠습니다. 

이 포스팅을 보기전에 반드시 이전에 연속되는 두개의 포스팅을 먼저 봐주세요. 

 

여기까지 잘 따라왔다면 굉.장.히 간단합니다!

 

1. Kotlin (SearchActivity.kt)

2019/08/04 - [안드로이드 개발/Kotlin으로 어플 만들기] - (Kotlin) RecyclerView 사용하기

 

(Kotlin) RecyclerView 사용하기

코틀린에서 리사이클러뷰를 사용해봅시다. RecyclerView는 ListView처럼 리스트를 나열해주는 기능을 가지고 있는데, ListView와는 다르게 View를 재활용하기 때문에 최적의 스크롤을 지원해준다고 합니다. 우선,..

hamzzibari.tistory.com

위 포스팅에서 쓴 코드,

//adapter 추가
search_recyclerview.adapter = SearchAdapter()
//레이아웃 매니저 추가
search_recyclerview.layoutManager = LinearLayoutManager(this)

기억나시나요?

이전에는 이 코드를 onCreate안에 만들었는데,

엑셀과 연동하기 위해서 readExcelFileFromAssets안으로 옮겨주겠습니다.

private fun readExcelFileFromAssets() {
        try {
            val myInput: InputStream
            // assetManager 초기 설정
            val assetManager = assets
            //  엑셀 시트 열기
            myInput = assetManager.open("oxquiz.xls")
            // POI File System 객체 만들기
            val myFileSystem = POIFSFileSystem(myInput)
            //워크 북
            val myWorkBook = HSSFWorkbook(myFileSystem)
            // 워크북에서 시트 가져오기
            val sheet = myWorkBook.getSheetAt(0)

            //행을 반복할 변수 만들어주기
            val rowIter = sheet.rowIterator()
            //행 넘버 변수 만들기
            var rowno = 0
            //MutableList 생성
            var items: MutableList<SearchData> = mutableListOf()

            //행 반복문
            while (rowIter.hasNext()) {
                val myRow = rowIter.next() as HSSFRow
                if (rowno != 0) {
                    //열을 반복할 변수 만들어주기
                    val cellIter = myRow.cellIterator()
                    //열 넘버 변수 만들기
                    var colno = 0
                    var fullname = ""
                    var quiz = ""
                    //열 반복문
                    while (cellIter.hasNext()) {
                        val myCell = cellIter.next() as HSSFCell
                        if (colno === 1) {//2번째 열이라면,
                            fullname = myCell.toString()
                        } else if (colno === 2) {//3번째 열이라면,
                            quiz = myCell.toString()
                        }
                        colno++
                    }
                    //4,8번째 열을 Mutablelist에 추가
                    items.add(SearchData(fullname, quiz))
            }
                rowno++
            }
            Log.e("checking", " items: " + items)

            //adapter 추가
            search_recyclerview.adapter = SearchAdapter(items)
            //레이아웃 매니저 추가
            search_recyclerview.layoutManager = LinearLayoutManager(this)

        } catch (e: Exception) {
            Toast.makeText(this, "에러 발생", Toast.LENGTH_LONG).show()
        }

    }

catch의 윗 줄에 넣어주시면 됩니다.

 

또 한가지 바뀐 점은,

search_recyclerview.adapter = SearchAdapter()에서

search_recyclerview.adapter = SearchAdapter(items) 입니다.

items라는 mutablelist를 어댑터로 넘겨줄거에요.

 

2. Kotlin (SearchAdapter.kt)

여기서는 이전에 만든 부분부터 딱 두가지만 바꿔주면 끝이납니다.

 

1)

class SearchAdapter : RecyclerView.Adapter<SearchAdapter.SearchViewHolder>()에서

 

class SearchAdapter(get_excel: MutableList<SearchData>) : RecyclerView.Adapter<SearchAdapter.SearchViewHolder>()로 바꿔줍니다.

 

2)

var items: MutableList<SearchData> = mutableListOf( SearchData("제목1", "퀴즈1"), SearchData("제목2", "퀴즈2"), SearchData("제목3", "퀴즈3") ) 에서

 

var items: MutableList<SearchData> = get_excel으로 바꿔줍니다.

 

결과물은!!!

디자인은 개떡이지만, 우리의 목적은 데이터 파싱!

간단하게 엑셀을 RecyclerView로 뿌려줄 수 있습니다. 

 

디자인은 xml에서,

추가적인 기능 구현은 kotlin에서 조금씩 바꿔가시면 훌륭한 Recyclerview를 만들 수 있을겁니다!

 

아마 다음 포스팅에서는 RecyclerView의 OnclickListener 사용법을 다루지 않을까 싶습니다.

끝.

 

댓글

Designed by JB FACTORY